2

我使用MVC和EF創建具有多個圖層的示例Web應用程序。我也使用Repository Pattern進行數據庫訪問。我只是具有MVC4 EF和存儲庫模式的N層體系結構

的層

  1. 大學生創業

    • 撥打存儲庫和執行業務邏輯。
  2. 學生資料

    • 實體PO​​CO
    • 實體上下文
    • 實體庫
  3. Student對象

    • 包含了使用NInject域對象
  4. MVC Web應用程序
    • 實體控制器(這裏實例化服務後)
    • 我綁定的所有接口(這個項目包含所有其他層的引用)。

我需要幫助在這個設計的優點和缺點。

回答

1

除了adv。和優點。 (http://www.codeproject.com/Articles/430014/N-Tier-Architecture-and-Tips#nAdvantages)是N層定義的,我會根據我最近與類似的架構經驗包括幾個要點:

好處是:

  • 由於控制器是薄層和業務邏輯都存儲在實際服務,您可以共享不同用途的服務項目,例如Windows桌面等。您也可以在將來爲Webapi公開相同的服務。因此可用性很高。

    • 每個圖層都在做自己專門的工作,並且在NInject的幫助下,您可以輕鬆地交換相同的圖像。我在當前項目中有一個很好的示例,其中針對調試模式,我將Exchange Online服務用於郵件網關。而對於發行版,我必須使用SMTP服務作爲郵件網關。 (請分別檢查DI adv。缺點)。
  • 當您在關注NInject的接口時,您可以使用Mocks for TDD。因此,您可以在列表中添加TDD和DI優點。

  • 代碼首先是很好的方法來表示你的數據庫,它是乾淨和透明的方法。你知道發生了什麼事。

  • 數據庫版本控制通過Code首先是最大的賣點。

缺點:

  • 即使你在邏輯上分離這些組分,但你不能單獨部署這些組件。因此,通過適當的會話處理可以實現縮放。因此更多的工作。

  • CS文件過多,每個控制器(1或2),服務(1接口和1類),存儲庫(1接口,1類)一個。因此,取決於您的應用程序,它將會廣泛地增長。我已經有超過100個文件可以管理。但在Resharper的幫助下,你可以擺脫這個缺點並將其轉化爲你自己的好處。

  • 儘管您可以爲存儲庫,控制器以及服務編寫通用CRUD操作。將有一段時間,你會最終會使得每個控制器有它自己的服務等等的路徑...

    • 我發現,驗證將無處不在,但我認爲它已經任何N層的情況。
  • 如果你先用Code創建POCO,那麼你肯定需要理解Migration;我仍然在努力尋找許多答案。

  • 對於代碼優先的DbContext,沒有直接和簡單的方法來調用函數(就像你在導入函數中,在Database first - edmx中使用sp)。它很乾淨,但有很多可能需要的破解。

  • Like Code首先爲您創建數據庫,因此數據庫管理不需要版本控制。不過,我覺得複雜的是處理部署,視圖,功能,sp;需要編碼。

  • 就性能而言,我想這將歸結爲您如何編寫代碼。

總的來說,我對我的Webapi完全一樣的架構,我對這個架構感到非常滿意。

+0

感謝您的詳細解釋... – DON 2014-09-27 13:33:25