6

我目前正試圖重構一個項目(asp.net mvc),根本沒有任何分離。只是文件夾:■什麼是一個有點大的網站在asp.net推薦的解決方案結構

  • 該項目有一堆EF代碼優先類(People.cs,Exam.cs, Message.cs等)
  • 該項目有多個倉庫中(它們都使用EF數據 上下文)
  • ,當然還有大量的控制器和的ViewModels

我們有一個測試項目,但我們的arent在TDD很好,所以它不是我們真的努力,截至目前。

我希望更明確地區分項目需要解決的不同責任,並希望獲得關於實現此目標的良好項目結構的一些建議。

請幫忙。 由於事先

回答

12

我建議以下領域驅動設計(DDD)和一個建議奠定了這一點,將創建下列項目的方式:

Company.Project.Web < - 你的MVC應用程序,但你仍然可以使用的WebForms Company.Project.Domain < - 數據傳輸對象(DTO的)的ViewModels,業務邏輯,活動 Company.Project.Data < - 庫接口

Company.Project.Data.EF < - 耳鼻喉科ityFramework庫的具體實施 Company.Project.Model < - 您的EF CodeFirst類

Company.Common < - 公用事業和/或擴展

一個共同的項目,我建議你從圖形看一下項目絲綢http://silk.codeplex.com/和實踐團隊。 DDD,Repository和MVC以及HTML 5和jQuery(vNext)混合的很好的參考實現。

+0

同意添加接口 - 並且我會查找使用IoC容器來處理在運行時解析接口到實現。 –

+0

我已經讀過viewModels不應該與服務層(業務邏輯)進行交互。他們應該仍然是網絡項目? – ignaciofuentes

+0

我們通常將ViewModel保存在Web項目中。儘管如此,我們的DTO可以直接用於表示層,無論是Web還是服務還是WPF(XAML)。 像Unity這樣的IoC容器是必須保持我們的關注分離並注入我們的服務依賴關係。 – jdmonty

11

我們使用類似於jdmonty提到的設計,但有點簡單。我們做到以下幾點:

  • ApplicationName.Web - MVC應用
  • ApplicationName.Services - 商業邏輯
  • ApplicationName.Domain - EF CodeFirst類和對其採取行動的倉庫
  • ApplicationName.Common - 多個使用的類和實用程序 項目
  • ApplicationName.Tests - 測試的各個項目

Web項目取決於服務項目。Services項目依賴於Domain項目。

+0

感謝您的建議。它看起來很乾淨......你介意給你一些關於你的視圖模型的詳細信息嗎?......它們是否與Services項目交互? – ignaciofuentes

+3

我們將ViewModel保留在Web項目中,因爲正如你所提到的,它們根本不應該與服務層交互。 ViewModels僅用於在Views和Controller之間傳輸數據。 –

+0

Nick,您是否在您的視圖模型中使用DataAnnotations進行驗證?如果你這樣做,我們可以說這些驗證也是業務邏輯嗎? –

相關問題