2013-01-01 44 views
0

好了,所以我有一個創建和管理我的單實例對象就像我的記錄器,HTTP請求,HTTP響應,路由器等等等等我的服務經理/定位器。我可以注射嗎?還是隻應該創造服務?

在我的啓動/引導文件,我只是將它實例化這個服務經理/定位/工廠對象並開始我的服務:

$services = new Services(); 

$logger = $services->getService('logger'); 
$security = $services->getService('security'); 
$auth = $services->getService('auth'); 
$router = $services->getService('router'); 
etc... 

它知道每個服務的依賴關係,並輕鬆創建像工廠這樣的對象。

的東西是我的,例如Auth類,如果以往任何時候都需要以某種方式在幾個月後兩個依賴我只需要:

  1. 修改我在Services類實例化Auth類中的方法。
  2. 修改我的Auth類中的構造函數,並添加兩個新的依賴項。

這將需要不到五分鐘。

$services對象還實例我的控制器。每個控制器都有1個依賴項(目前),即View

這樣做的問題是,當我創造出20多個控制器,都明顯具有相同的相關性,然後在幾個月我需要兩個依賴添加到控制器我將不得不:

  1. 修改我的Services類中的方法,該類實例化Controller類。
  2. 修改的控制器類的構造函數,並添加兩個新的依賴。

我知道,如果我獨立創建的控制器中的服務管理器/定位/工廠對象之外,而是注入$services對象到控制器這樣的話每個控制器我做只有一個依賴它的工作。我可以賺取他們的一百萬,如果有另一個依賴關係,我不會去改變所有的控制器文件,但這是好的嗎?

我覺得當它只需要一個或兩個來自服務管理器的服務時,它會向控制器注入很多東西,而且它會隱藏控制器依賴關係,它們不像注入時那樣可見他們進入構造函數。

您對此有何評論?你覺得我應該怎麼做?

謝謝。

+0

https://www.youtube.com/watch?v=RlfLCWKxHJ0 –

+0

我不確定我是否理解你的問題......但是如果你有一個新的依賴關係需要在每個控制器中實現,爲什麼不能是否將它添加到父級控制器類?...我認爲良好的類層次結構應該可以防止您必須在所有控制器中複製代碼。也許如果您在「服務」和控制器類中發佈了一些關於如何處理依賴的示例代碼,它可以幫助我們理解您需要的東西。 –

+0

@tereško哈哈我大約15分鐘到那個視頻。從你的「MVC應該如何構建模型」這篇文章中發現它非常好。 @巴託我明白你的意思。我在每個有'parent :: __構造(Dependency1,2 ...)的控制器中都有一個構造函數;'但是現在我要去除這些構造函數,並使用基礎控制器構造函數設置任何依賴項,以便將來很容易添加任何新的依賴關係。謝謝。 – ibanore

回答

0

聽起來像是你需要一個控制器出廠(或方法),你的服務類中使用。
作爲參數,你可以通過在類名,例如:

$controller = $this->controllerFactory->create('Foo\BarController'); 
$controller->setAnotherDependency($baz); 

附加的依賴,這是不是所有控制器共享,就可以通過制定者添加。

btw:爲什麼不使用像PimpleSymfony2 DIC這樣的依賴容器?

+0

感謝您的回覆。是的,我使用Symfony2 DIC。我想我現在想到了。 – ibanore

相關問題