2010-06-12 33 views
1

這是此問題的延伸:Understanding how to inject object dependencies。由於它有點不同,我想分開它們,希望它更容易回答。此外,這不是一個真正的系統,只是一個我認爲我們都會熟悉的簡單例子。 TIA。 :在作爲依賴注入之前,對象應該完全完整嗎?

DB

線程:thread_id單,THREAD_NAME等

帖子:POST_ID,thread_id單,POST_NAME,post_contents,POST_DATE,post_user_id等

概述

基本上我正在尋找最可維護的方式來加載$ post_id並使其級聯並加載我想知道的其他內容我試圖保持控制器瘦。但是:

  • 我結束了太多的依賴注入
  • 我傳遞在初始化,但空的對象
  • 我想限制我多少參數繞過
  • 我可以在$ thread(一個< - )中注入$ post( - > many),但在該頁面上我沒有看到一個線程,我正在查看一個帖子
  • 我可以將它們/注入一個新對象

詳細信息

如果我將對象注入另一個對象,是否最好先完全創建對象?我試圖限制我必須將多少個參數傳遞給一個頁面,但我最終得到了一個圓圈。或者,我可以創建一個新的對象並注入$ post和$ thread到它,但隨後我的對象具有越來越多的依賴關係。

+0

您是否考慮過使用[Dependency Injection Framework](http://components.symfony-project.org/dependency-injection/)爲您創建對象圖? – Gordon 2010-06-12 14:07:53

+0

排序,我創建了我自己的,但問題不是創建它們,而是知道如何做到最好。似乎奇怪的是傳遞空的物體。這似乎不會有助於單元測試。我將不得不創建一個模擬對象,它會有 - > load(), - > set()等方法。 – Hans 2010-06-12 20:39:11

+0

問題可能出在你的類/對象設計上,你能澄清什麼是'線程',什麼是' POST'?爲什麼你需要'load()'? 「post」代表什麼,「thread」代表什麼? – rickchristie 2011-04-30 10:33:29

回答

0

這些不是依賴關係,只是同一模型的一部分,所以不需要注入任何東西。想想你的模型和它的用法。什麼是主要實體(構建塊) - 帖子或線程?或者他們同樣重要/使用? 您應該只處理(加載/存儲)主要實體,最好使用通常稱爲存儲庫的外部類。例如。你可以使用方法ThreadRepository :: findById($ id),這就夠了,剩下的就放在倉庫內部了......在倉庫中加載和設置任何你想要的內容,但是不要將它暴露給應用程序的其他部分。如果性能問題,您也可以實施某種形式的延遲加載(內部資源加載器,代理模式等)

如果您有空餘時間,請下載並閱讀本書(或購買原版): http://www.infoq.com/minibooks/domain-driven-design-quickly 您的編碼問題已經解決,並在那裏解釋清楚。

+0

嗯,我討厭的問題訂購上:)因爲帶來這個帖子從死:( – gseric 2013-07-31 19:50:02