马真托继承链.好或坏的做法


Magento chain of inheritance. Good or bad practice?

我刚刚从Magento(1.9)开始,我读到Magento是OO设计的,这是一个很好的观点,但是在深入研究了核心和一些第三方模块之后,对我来说很奇怪,类继承链中的其他类(这最多可以达到4或5个继承级别)。

这是一个好的做法吗?


final class I4_TaskManagerOrderXml_Block_Adminhtml_System_Config_Button_Runnow_Orderxml
    extends I4_TaskManager_Block_Adminhtml_System_Config_Button_Runnow_Import {} 

class I4_TaskManager_Block_Adminhtml_System_Config_Button_Runnow_Import
 extends Mage_Adminhtml_Block_System_Config_Form_Field { //some stuff }

class Mage_Adminhtml_Block_System_Config_Form_Field
 extends Mage_Adminhtml_Block_Abstract
 implements Varien_Data_Form_Element_Renderer_Interface
{ //some stuff }

class Mage_Adminhtml_Block_Abstract extends Mage_Core_Block_Template
{ … }

Magento使用了非常多的抽象层,因此它使第三方开发人员可以更灵活地挂钩到代码中。

(几乎)Magento中的每个类都可以通过扩展重写。这意味着您可以轻松地将自己的方法添加到现有类中,而无需接触核心代码。

与 OO 一样:每个平台使用的抽象层数量都不同。例如,Magento中的产品模型具有以下链:

  • Varien_Object,这是一个以Magento的魔法获取器和二传手功能而闻名的职业
  • Mage_Core_Model_Abstract ,它添加了基本的模型功能(如加载和保存)。
  • Mage_Catalog_Model_Abstract ,例如,它为产品和类别添加了基本的目录功能。
  • Mage_Catalog_Model_Product,这是一个基本产品。