我刚刚从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
,这是一个基本产品。