Dot-Net

Visual Studio 解決方案:這些解決方案的項目是否太多?

  • June 1, 2019

在我目前工作的公司中,我們支持 4 個有點相關的 Windows 應用程序。對於每個應用程序,我們都有一個解決方案,每個解決方案包含 50 到 100 個項目。一個或多個解決方案之間可能共享 40 或 50 個項目。

只是給你一個想法,更大的解決方案有近 90 個項目,其中 20 個是 UI 項目(主應用程序、自定義控制項項目、UI 幫助項目),另外 20 個是業務層項目,可能有 30 或 40 個數據訪問層項目其餘的是 Windows 服務項目和專業項目

我一直覺得每個解決方案的項目太多。當然,我們談論的是大型應用程序,但我不明白為什麼許多項目無法合併。在我之前的公司中,我們實際上有一個用於業務層的項目,一個用於 DAL 的項目,顯然每個 Windows 或 Web 應用程序都有一個項目。

以下是我因項目量大而遇到的一些問題:

  • 大編譯時間。
  • 通常應該是 Private 的類需要是 Public 才能被同一層中的其他項目訪問。
  • 我最近開始使用分析器 Eqateq。試用版允許分析多達 10 個 dll。我的情況顯然使使用此應用程序變得複雜。
  • 跟踪項目之間的引用非常複雜。我確信項目之間有很多未使用的引用。

相比之下,我還沒有發現這種情況的優勢。

所以,我的問題是:

  • 您什麼時候決定創建一個新項目,而不是僅僅在目前項目中創建一個文件夾?
  • 有什麼我忽略的優勢嗎?

更新:

請記住,我並不是建議為所有事情都建立一個項目。至少應該有一個用於 DAL 的項目,一個用於 BL 的項目,一個用於每個 UI 應用程序的項目。而且我意識到即使這對於大多數應用程序來說也是不現實的。我想要了解的是,定義裝配的“單一責任”級別的最佳實踐是什麼?我的意思是,這是一個非常主觀的問題,如果走極端,將導致每個班級有一個集會。

更新 2:

所有三個答案都提供了有價值的資訊,但由於我只能選擇一個,因此我選擇 Doc’s 作為他關於如何確定 DAL 項目數量的評論。我還連結到我剛剛發現的具有相關資訊的其他問題:這里這裡。我也推薦閱讀這篇文章

我們主要討論的是 .NET 項目,對吧?將您的應用程序拆分為不同的項目/程序集會迫使您避免這些項目之間的循環依賴,因為 C# 和 VB.NET 編譯器確實禁止這樣做。如果你把所有東西都放在一個大項目中,那麼每個類都可以引用該項目中的所有其他類,從而讓你創建一個真正的依賴噩夢。如果您要在團隊中使用單元測試和開發,如果團隊成員可以在不同的、隔離的 DLL 上工作並單獨測試它們,那將更容易。

您問題的“跟踪引用”部分:如果您將所有內容放入一個大 DLL 中,則您的類之間的引用與您有單獨的 DLL 一樣,但您無法再控制它們。“私人”課程也是如此(我認為您的意思是“內部”?)

當然,我不能告訴你的是,如果你的 90 個項目是精心挑選的工作單元。這是一個“單一職責”、正確的抽象級別和由此產生的依賴關係的問題,只有了解您的應用系統詳細資訊的人才能回答。

編輯:到目前為止,我已經閱讀了一些文章(比如這篇文章),它們通過命名空間定義組件邊界並將多個組件放入一個物理程序集/一個 VS 項目中來縮短編譯時間。為了使這種方法可行,可能需要像 NDepend 或類似的工具來確保組件之間沒有循環依賴關係。對於大型項目,這可能是更好的選擇。

看起來這是一個過早優化的經典例子。您團隊中的開發人員似乎正在創建許多項目,這可能是由於歷史架構的原因,而您通過質疑這種方法正在做正確的事情。

我個人的意見是從每層一個項目開始(正如你提到的),比如一個用於 GUI,一個用於業務層,一個用於 DAL 等。只有在出現特定需求時才應該為您的解決方案創建其他項目,而不是過早地創建。此時,您可以重構解決方案以將項目“文件夾”移動到其自己的單獨項目中。

這將確保: - 建構時間更快 - 您擁有項目所需的確切項目數量 - 您已經記錄了為什麼創建特定項目的推理(它滿足什麼需求)

在解決方案中創建許多特定項目只是“過度工程”。您不會過度設計程式碼並在不需要的地方創建類。當需要時,您將重構程式碼以包含具有單一職責的類。這同樣適用於解決方案和項目。

引用自:https://stackoverflow.com/questions/6602672