【发布时间】:2012-01-07 15:19:49
【问题描述】:
我目前正在开发一个基于 MVC 的项目(无框架),使用 RedBean 作为我的 ORM 层。 RedBean 允许我通过扩展RedBean_SimpleModel 类来create models:
MyModel extends RedBean_SimpleModel{
}
问题是我也使用依赖注入。有一个名为AContainer 的特殊抽象类,希望访问 DI 容器的类可以对其进行扩展。这允许依赖注入框架在创建对象期间通过方法将 DI 容器的副本注入到该类中。然后,可以使用$this->get('classname'); 从 DI Container 中获取一些东西。
在这种情况下,我需要我的模型同时扩展 RedBean_SimpleModel 和 AContainer。但是我们都知道多重继承充满了problems。
除了复制RedBean_SimpleModel并将其命名为CModel,然后修改为扩展AContainer,如下所示,还有什么模式或方法可以解决这个问题吗?
class CModel extends AContainer{
//copy all the methods from RedBean_SimpleModel and paste it here.
}
【问题讨论】:
-
嗯,为什么要遵循 DI 的想法,您需要从基础类继承所有类?!更喜欢委托而不是继承 (c)
-
@zerkms,请详细说明。 Symfony2 也使用一个类似的类进行容器注入:api.symfony.com/2.0/Symfony/Component/DependencyInjection/…
-
DI/IoC 与所需的继承无关。这完全与您检索依赖对象的方式有关。我希望有一个单独的容器对象(它不是我所有类的父对象)并在我需要的任何地方使用它。
-
@zerkms,我的容器注入也是通过一种方法完成的,实际上它的工作原理与 SF2 的完全一样。
-
那么我看不出有任何理由为所有这些人使用共同的父母。只需将您的容器拆分到另一个层次结构。
标签: php class design-patterns multiple-inheritance