2009-12-03 117 views
3

我有一個哲學問題,這也需要考慮性能的影響。.NET項目架構

我們正在設計一個新的系統,它有許多不相互關聯的子服務,但也有一些可能會互相使用(我們正在使用統一來避免任何解耦)。

我的主要問題是:

  • 我們應該打破他們到不同的DLL的,其中每個服務都有自己的DLL(如product.services.serice1.dll,product.services.serice2.dll等。 ),或者我們應該將所有這些服務整合到一個具有不同名稱空間的DLL中以在它們之間分離。 它的表現,兩者有什麼區別?此外,社區(和微軟)認可的最「可接受」標準是什麼?

感謝

+0

嗨,大家好,感謝所有的輸入;但不是你真的在尋找多個(超過20個)不同dll需要加載的效果,而不是一個單一的大dll。我想知道,除了延遲加載的優點(並且我們現在忽略部署困難),是否有加載大量DLL的風險?謝謝! – 2009-12-03 20:03:43

+0

第一次訪問時會加載一個dll。所以如果系統在啓動時有一個初始化階段,可以調用dll來強制它們加載。這將避免在「運行時間」的性能滯後。 20 dlls == dll地獄。如果可能,我會進行整合。 – Paul 2009-12-03 20:12:41

+0

他們只有*不同*性能特點。一個大型組件花費的總時間較少,但它會一次性發生,因此用戶(或客戶端系統,如果它們對時間敏感的話)更有可能感受到它。多組件方法需要更多的總時間來加載(如果全部加載它們),但是這個時間是分佈式的 - 因此每個加載事件都不太可能產生顯着的影響。 – 2009-12-03 20:18:28

回答

3

如果您的服務旨在一起使用,請將它們分組在同一個程序集中。我已經看到系統中有大量的dll被加載(並且有大量的解決方案在其中),而沒有一個單獨的實例需要櫻桃挑選其中的一個。這並不妨礙你在命名空間中分離和理解分離。

就性能而言,dll的加載數量並沒有真正的影響(如果你保持理智,不要去爭取數以千計的),但是如果你堅持默認的行爲VS喜歡複製每個項目的bin/debug目錄中的每個引用。從中到大的解決方案(1000年級),構建過程將會更長,更令人沮喪。

將組件視爲部署單元。如果東西是要一起部署的,請將你的東西裝入同一個程序集中。

作爲一個警告,如何挫敗太多的程序集中的項目拆分,可以看看NUnit發行版。超過30個不同的dll,有些你必須參考才能進行單元測試,有些你不需要,你最終會尋找你需要的類型。

1

就個人而言,我想他們分成多個獨立的DLL項目,以簡化開發,測試,維護&。

+0

根據我的經驗,單獨的程序集並不總是簡化這些東西 - 通常恰恰相反。 (特別考慮到部署。)你能詳細說明一下嗎? – 2009-12-03 20:14:56

1

當他們是單獨的「服務」時,我強烈希望將它們分解爲單獨的項目和程序集。

如果您將所有內容放入單個程序集中,任何想要使用任何服務的客戶端都會自動加載整個程序集。通過分解它們,您可以在不同的客戶端應用程序之間降低內存使用率,並且只根據需要加載內容。從技術上講,加載一個程序集比加載許多程序集要快,但如果你懶惰地從感知性能方面加載程序集,速度並不會更快。

加載程序集後,性能應該是相同的。

+0

我不得不笑。這是一個複雜的問題,許多利弊。 – Paul 2009-12-03 19:41:06

+0

這是一個非常複雜的問題。我只是從一個非常普遍的案例來談論它。他特別提到通過多個名稱空間支持多種類型的事實使我相信在「服務」中存在一些問題的分離,在這種情況下,單獨的程序集通常是最好的方法。 – 2009-12-03 19:43:46

2

部署是一個大問題。如果所有這些功能都將被部署在一臺機器上,我會建議一個.dll,用不同的名稱空間進行行爲分離。一個.dll將避免許多將來的問題與.dll兼容性,並大大簡化部署和安裝。

保羅

1

不要過早地優化。我會分離命名空間,直到您有要求將它們作爲本地優化加入。

+0

嗨,大家好,感謝所有的輸入;但不是你真的在尋找多個(超過20個)不同dll需要加載的效果,而不是一個單一的大dll。我想知道,除了延遲加載的優點(並且我們現在忽略部署困難),是否有加載大量DLL的風險? 謝謝! – 2009-12-03 20:03:13

2

我喜歡開發一個大系統作爲幾個獨立的程序集/ DLL,以促進存在的體系結構。之後,如果有必要/可取的話,您可以在部署之前將功能重新打包成一個單獨的程序集。

+0

我也喜歡這種方法。 使用多個裝配意味着您傾向於考慮每個裝配(及其類型)與其他裝配(分層等)的關聯方式。一旦您有一些滿意的東西,就可以將裝配整合到更少,更大的裝配中。 – 2009-12-03 20:47:16

+0

是的最窄的API往往是組件間API。同樣,如果這是一個大項目,你可能有不止一個開發團隊,不同的團隊在不同的程序集上工作(具有定義良好的組件間API):另請參閱Conway定律。 – ChrisW 2009-12-03 20:55:52

0

的DLL每次當我們稱之爲功能在其中時間加載。一個大的DLL不是一個好方法。使用更小的dll,這會增加你的性能。