由於ServiceLocatorAwareInterface可能爲removed from the AbstractController in ZF3,因此依賴關係應該通過構造函數或setter方法傳遞。Zend Framework 2 MVC應用程序中的依賴關係管理
考慮到這一點,考慮用戶或站點控制器的用例,其中包括註冊,激活帳戶,登錄,註銷等操作。至少需要一個UserService和2個表單。添加幾個相關的操作(遠程驗證,帳戶鏈接等),最終得到4或5個表單。
通過構造函數傳遞所有這些依賴關係至多是凌亂的,更重要的是,每個動作通常只需要1個表單。
您認爲以下哪種技術更好?爲什麼?
爲每個動作創建單獨的控制器,以便每個控制器只需要一個表單(除了服務)。例如RegistrationController,LoginController,LinkAccountController等。
- 你最終得到了很多控制器。
在控制器的工廠中,根據請求的動作提供不同的形式。
- 控制器的建設變得依賴於這家工廠,更具體的要求環境(路由等),你可以直接構造控制器(用於測試或別的什麼),但你需要確保依賴關係可用,如果不是,則會拋出異常。
使用事件管理器,在需要表單時觸發控制器中的事件,並讓事件處理程序根據需求提供相關性。
- 該技術被描述爲here。
- 然後,您的控制器將依賴於EventManager,而不是ServiceLocator,這可能不會更好。
將FormElementManager傳遞給控制器,並從中請求表單。
- 沒有比SL本身更可能。
直接在控制器內部構造表單。
- 這是如何影響可測性的?
- 同樣的問題將適用於處理具有多個服務(而不是表單)的控制器。
其他?
參見:
我不會發布這作爲一個答案,但: 1)我沒有看到許多控制器是一個問題。 2)永遠不會這樣做。工廠是廢料邏輯。不要試圖徹底改變它。 3)maaaaagic - 嘗試調試! 4)表單元素管理器_IS_ a ServiceLocator 5)不,我們離開了那個 – Ocramius