2012-02-02 73 views
4

我的目標是讓我的框架儘可能脫離我的應用程序(儘管我知道這不是完全可能的)。如何使用依賴注入創建業務層對象?

我有幾種不同的常見類型的模型,我在我的應用程序...映射器,數據對象和值對象中使用。例如,UserMapper需要一個UserData對象並從數據庫收集信息,然後將其映射到UserValue對象中以供在Controller中使用。

這意味着,這些車型具有以下依賴性:

  1. UserMapper:需要的UserData,並建立UserValue(S)
  2. userData的方式:需要分貝(從框架)
  3. UserValue:不需要任何東西

我是否在我的框架的DIC方法中創建Mapper對象,Data對象和Value對象,以便可以自動注入依賴關係?或者我創建一個獨立的DIC /工廠來處理業務層的東西?

+1

沒有模塊可以完全脫離其他模塊。畢竟,與其他模塊完全隔離的模塊對任何人都沒有多大用處!重要的是耦合是如何「緊密」的。 DI是一種允許模塊間耦合保持鬆動的技術。類型提示要注入的類比在方法本身中創建/提取類寬鬆,因爲可以替換請求的類的子類。類型提示接口更加寬鬆,因爲現在你可以通過任何對象來提供接口。 – GordonM 2012-02-02 22:44:43

+0

相關:http://stackoverflow.com/questions/4835046/why-not-use-an-ioc-container-to-resolve-dependencies-for-entities-business-objec/4836790#4836790 – 2012-02-03 07:38:13

回答

0

依賴注入容器可以處理所有對象的創建。這包括您的DIC使用工廠創建使用工廠模式的特定對象。

我喜歡用創建對象的閉包加載我的DIC。這樣所有對象都只在請求時才被加載,但在創建對象時我仍然有很大的靈活性。

您可以用數據映射器給出空白用戶值對象的方式編寫代碼,然後根據數據庫數據初始化對象的數據。另一種方法是通過自己創建另一個類來創建數據映射器和用戶值類之間的緊密耦合。

試圖將您的框架與您的業務邏輯分開,並不意味着不允許二者聯繫,只是沒有業務邏輯代碼進入您的框架代碼。使用DIC創建用於業務邏輯的對象並不意味着您的DIC中存在業務邏輯。

+0

感謝您的答案。那麼,你是在說,我的DIC可以創建框架內容,比如配置,緩存和會話對象,還有像UserMapper,UserValue等業務內容? – johnnietheblack 2012-02-02 23:58:31

+0

我不明白爲什麼不。 – dqhendricks 2012-02-03 00:11:11

+0

根據您打算創建的對象數量,我會查看容器的性能。 DI容器不僅僅是類固醇的工廠。它在引擎蓋下做了很多繁重的工作。對於幾百或幾千個不成問題的對象。但是,這個數字越大,容器的影響就越大。一些容器跟蹤它們創建的對象,以便能夠處理解析對象圖的某個部分。如果您有很多可能會增加內存消耗的業務對象。 – 2012-02-03 06:54:48