2011-11-28 69 views
0

我目前正在使用RedBean作爲我的ORM層使用基於MVC的項目(無框架)。紅豆讓我create models通過擴展RedBean_SimpleModel類:如何處理這種多重繼承?

MyModel extends RedBean_SimpleModel{ 

} 

的問題是,我還使用依賴注入。有一個叫做AContainer的特殊抽象類,希望能夠訪問DI容器的類可以擴展。這允許依賴注入框架在創建對象期間通過方法將DI容器的副本注入到該類中。然後,可以使用$this->get('classname');從DI容器中獲取內容。

在這種情況下,我需要我的模型擴展RedBean_SimpleModelAContainer。但我們都知道多重繼承是充滿了problems

除了製作RedBean_SimpleModel副本,並調用它像CModel,然後修改它來擴展AContainer,如下圖所示,有什麼模式或方式來解決這個問題呢?

class CModel extends AContainer{ 
    //copy all the methods from RedBean_SimpleModel and paste it here. 
} 
+1

嗯,爲什麼要遵循DI的想法,你需要繼承**所有**你的類從基礎?!優先考慮繼承(c) – zerkms

+0

@zerkms,請詳細說明。 Symfony2也使用類似的容器注入類:http://api.symfony.com/2.0/Symfony/Component/DependencyInjection/ContainerAware.html – F21

+0

DI/IoC與所需的繼承無關。這只是關於您檢索依賴對象的方式。我更喜歡有一個獨立的容器對象(這不是我的所有類的父對象),並在需要的任何地方使用它。 – zerkms

回答

0

恕我直言,你不需要依賴注入與RedBeanPHP模型。儘管你喜歡,你也可以從RedBean_Facade使用它。

RedBeanPHP模型隨即附加到bean上,因此它們已經分離。 bean和RedBeanPHP模型之間沒有依賴關係。您可以獨立測試您的模型。