Dot-Net

終極 Visual Studio 解決方案結構

  • August 18, 2010

意識到這可能是基於手頭項目的主觀因素,我正在尋找建構 VS(Visual Studio)解決方案的“最佳實踐”方法。

請隨時編輯此內容,評論您認為可能不正確的內容,提出替代方案等。我很樂意看到這個社區 Wiki 成長為一個很好的資源,供剛開始使用 VS Solutions 的人們使用。

以下是我現在為我工作的內容(在我目前的項目中),但是我知道有一些東西在錯誤的地方。 在我的場景中,我正在使用**MVC 2建構一個Web 應用程序

請發表您對最終解決方案結構的想法,以便我們了解“最佳方式”/“最佳實踐”(無論這意味著什麼

IE:

你如何分解你的 DAL(數據訪問層)/BLL(業務邏輯層)?

您是否將儲存庫層和服務層放在 BLL 中?如果您使用的是 MVC(模型-視圖-控制器),您是否將控制器保留在 UI 中而不是核心中?

您是在 Utility/Miscellaneous 文件夾中扔了很多東西,還是將其進一步分解?

等等…


  • 我的解決方案 + 我的解決方案核心
    • 驗證
      • 這是我有一個 POCO 和一個方法將 poco 序列化到 auth cookie 的 userData 部分的地方
    • 根據
      • 這是我保存 BaseController 和 BaseGlobal 的地方
    • 控制器
      • 我所有的控制器(顯然)
    • 領域
      • 數據庫模型
        • 包含我的 L2S .dbml 文件
      • json模型
        • 用於將 JSON 對像傳遞給 veiw 的模型
      • 儲存庫
      • 服務
      • 視圖模型
    • 擴展
      • 所有擴展方法
    • 過濾器
      • 動作過濾器
    • 實用程序
      • 蜜蜂
        • 所有第三方 API 程式碼都在這裡
      • 徽章
        • 徽章計算在這裡
      • 郵件客戶端
        • 使用此處的類發送純文字或 html 電子郵件
      • 路由助手
        • 包含一個啟用小寫路由的類
      • 還包含我不知道該放在哪裡的東西… IE:HTMLSanitizer、自定義 HtmlHelpers、UserInfo 助手(IP 地址、瀏覽器等)、DataConverter 等 + 我的解決方案.UI
    • 應用_瀏覽器
    • 資產
      • CSS
      • 圖片
      • 腳本
    • 意見
    • Global.asax -繼承自 BaseGlobal
    • 網頁配置

螢幕截圖

核洋蔥

請隨時發表相應評論,或者更好的是,在下面發布您自己的版本(答案)。我知道我所擁有的並不是最好的方法。

您的解決方案/項目結構對我來說看起來很合理。如果您從未看過S#arp Architecture,您可能想要。您的結構與 S#arp 的體系結構之間的主要區別在於 S#arp 將控制器、服務和儲存庫分解為單獨的項目。這樣做的主要好處是更容易對依賴項實施邊界(例如,您不會意外地從 Core 中的程式碼訪問數據訪問特定庫)。

除此之外,您的結構看起來與我傾向於用於我的項目的結構非常相似。我還為擴展方法添加了一個“擴展”文件夾,因為有時很難找到合適的地方。

不錯的維基。

我正在開始一個新項目,這是我開始的結構。

它遵循 Microsoft 最佳實踐(業務、數據、服務、展示)。

替代文字

在我的解決方案中:

  • 業務:特定於領域/項目的邏輯,尤其是 POCO。
  • 數據:儲存庫。不言自明。
  • 服務:儲存庫之上的邏輯。我可以在此處添加記憶體、過濾等。我的 UI 通過服務與儲存庫通信,而不是直接與儲存庫通信。(UI 的一對一依賴)。
  • 介紹:MVC 應用程序(待定)。

您會注意到我也習慣在實際項目程序集名稱前加上 FQN。

我只是喜歡它的外觀,而且在對象資源管理器中它看起來都很好並且“像樹一樣”。

我也有在文件夾前面放一個數字的習慣,所以它根據“什麼需要什麼”進行排序。換句話說,一切都依賴於業務層(所以它在頂層),儲存庫只依賴於業務,服務依賴於儲存庫和業務,呈現依賴於服務和業務等。

當然,以上只是一個起點。我現在擁有的只是一個返回使用者的儲存庫,以及在其之上應用邏輯的服務(過濾)。

最終,我將擁有更多的業務項目、更多的儲存庫(Web 應用程序的每個邏輯區域一個)、更多的服務(外部 API、集成),當然我在 Presentation 中什麼都沒有(我在做 TDD)。

我也喜歡將依賴項都放在一個地方(項目文件夾)。

對於擴展,每個項目我都有一個類(Extensions.cs)。換句話說,我正在“擴展”儲存庫,或“擴展”使用者服務,或“擴展”某些 UI 功能。

對於測試項目 - 我有每個解決方案項目的測試項目。

那是我的兩分錢(因為它的價值)。

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