Asp.net-Mvc-4

ASP.NET MVC 解決方案的最佳結構

  • July 10, 2017

我嘗試按照最佳實踐方法建構我的最後一個大型 MVC 項目,但不太了解我在做什麼。

它有一個數據、業務和 Web (MVC) 項目,但控制器包含大部分程式碼,數據層使用 NHibernate,並且有幾個儲存庫負責太多事情,而業務層是任何不適合的東西的垃圾場不屬於其他兩個項目。它可以工作,但我覺得它可以設置得更好——我不滿意的主要事情是胖控制器和儲存庫。

我正在開始一個新項目,該項目可能會變得相當大,所以我會花更多時間嘗試讓我的設計提前。閱讀更多內容後,我嘗試為每個聚合根創建一個儲存庫,然後在業務層中為表示層中的每個控制器提供一個服務。

我最初的希望是大部分程式碼都將放在服務中,再加上較小的儲存庫,這將使我的控制器和數據層保持精簡。但到目前為止,這還沒有發生。

我讀過的所有內容都表明視圖模型不應從業務層返回,而應填充在表示層中,因此目前我的服務層主要是將模型從我的數據層傳遞到表示層,然後完成準備視圖模型所需的工作。所以我仍然有胖控制器,加上瘦業務和數據層。

我的表示層也知道我的業務層和數據層,但我認為這種分離的部分目的是減少耦合?

我把這一切都搞錯了嗎?我是否應該停止盲目地遵循我在網際網路上閱讀的內容,而只是在業務層中準備視圖模型,以便我可以將大部分程式碼移到那裡?我應該回到經典的 ASP 嗎?:)

我在設置項目結構時使用的主要指南是確保我可以將一些 operationcontract 屬性添加到業務邏輯層,然後將其託管為 wcf 服務。

如果我能做到這一點,這意味著業務邏輯層已經隔離了我的數據層,並且僅通過傳遞簡單的結構和實體與其客戶端進行互動。數據層完全隱藏。

所以我通常的結構是這樣的:

Solution
   Business.Contracts (interfaces for bll layer in here)
   Business.Logic     (concrete implementations of contracts in here)
   Business.Entities  (Pocos that bll uses)
   Data.Contracts     (interfaces for dal)
   Data.Sql           (Concrete Sql implementation of contracts)
   Common.Enums       (Enums needed by all projects)
   FrontEnd           (Main mvc app)

所以在這個結構中,我的 mvc 項目只處理業務命名空間和公共命名空間。

然而,當與實體互動時,我傾向於在 mvc 項目中使用我自己的模型來允許我添加註釋和前端特定功能,然後我為這些模型提供隱式轉換,以便能夠與業務實體互換使用。

高溫高壓

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