【问题标题】:How to deal with this multiple inheritance?如何处理这种多重继承?
【发布时间】: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_SimpleModelAContainer。但是我们都知道多重继承充满了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


【解决方案1】:

恕我直言,您不需要使用 RedBeanPHP 模型进行依赖注入。如果你愿意,你可以从 RedBean_Facade 使用它。

RedBeanPHP 模型动态附加到 bean,因此它们已经解耦。 bean 和 RedBeanPHP 模型之间没有依赖关系。您可以独立测试您的模型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-11
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 2011-12-15
    相关资源
    最近更新 更多