2013-02-01 98 views
0

我有以下情況。我們正在開發一個多層應用程序,所以我爲每個圖層製作了不同的程序集。讓我們稱他們爲Top,Middle和Base。他們依賴於:.net程序集依賴關係鏈

Top-> Middle-> Base,因爲Top使用來自中部和中部的基部。

現在我們將有一個secong Applikation Top2,它只需要來自Middle的一些不使用Base的任何類。

有沒有辦法,在Top2的部署中不包含Base?

當試圖編譯時,VS告訴我我還需要對彙編庫的引用。

最佳 托馬斯

+1

當然,把中間分成兩部分! – KingCronus

+0

您的意思是,Middle-1使用Base和Middle-2的Middle-Middle和Middle-2,但Middle-2不使用Base? – Thomas

+0

是的。我會在答案中詳細說明。 – KingCronus

回答

1

聽起來像「中」是有點大了它的靴子。

程序集不應該引用它不需要的任何東西。所以,你的情況聽起來像是分解組件的好選擇。

當前

Application One -> "Middle.dll" -> "Base.dll" 

您的提案

Application One -> "Middle.dll" -> "Base.dll" 

Application Two -> "Middle.dll" -> "(Redundant) Base.dll" 

這是出現在一些非常常用的對象基本上是與業務邏輯集中unneccesserily一個典型的問題。也就是說,您可能在Middle.dll中有對應用程序有用的實用程序類,但它們並不真正需要在那裏。你可能會更好與單獨的公用事業DLL。

建議

Application One -> "Middle1.dll" -> "Base.dll" 
       -> "Middle2.dll" 

Application Two -> "Middle2.dll" 

所有這一切都需要使用Base.dll,目前存在於Middle.dll的功能,應移至Middle1.dll。這樣,如果你只需要使用非依賴代碼,你可以參考Middle2.dll

它可能是一個大的重構,取決於你的代碼庫,但後來在線上,你會感激它!

好處這個

  • 測試將被提高。
  • 如果您需要將這兩個應用程序完全分開,那麼重構的次數就會減少。
  • 減打破這兩個應用程序,如果你只需要改變「Middle1」出於某種原因的擔憂
  • 清潔分離 - 的機會
  • 沒有編譯器的問題,就像你現在有
  • 不需要用程序無結塊代碼每一個程序
  • 更小,更易於管理的組件
  • 改進的智能感知
  • Middle1和Middle2可以共享同一個命名空間,所以你的應用程序,他們不會知道其中的差別。

注:很顯然,我不是建議你應該叫他們Middle1和Middle2。但你明白了。

+0

謝謝,幸運的是,我們的項目還很年輕,所以重構是非常重要的。現在一切都很好。解決方案是將所有沒有外部引用的數據類放入一個程序集中。 – Thomas