1. 系統常見的分層 設計模式
在開發asp.net mvc應用的時候,visual studio 給咱們建立了默認的文檔結構,通常狀況下咱們在一個項目下工做,參考微軟的官方例子:ContosoUniversity.sln api
通常狀況下咱們能夠將DAL單獨出來做爲一個項目,最多還加一個接口Layer的項目,構成了簡單的三層架構模式。或者跟進一步講一部分業務獨立出來成爲一個Business 層。分離出來的好處,相信你們都有體會: 服務器
1. 獨立出來的Layer或說組件,便於替換。特別是經過接口層的引入後,可以作到程序不依賴於具體的實現類。特別是經過一些Ioc容器的注入,基本能夠作到客戶端(調用接口的一端)程序的零修改。這也是設計模式裏講的對擴展開發,對修改關閉原則,里氏替換原則-依賴於抽象而不是具體的原則。 架構
2. 大的項目中,方便於多個團隊的開發。好比不一樣的團隊能夠開發不一樣數據訪問層,業務邏輯層。特別是在分佈式系統開發過程當中,服務端提供給客戶端只是方法的接口。 mvc
3. 可維護性,當某個模塊出現bug的時候,你只需改改對應的位置,而後compile,而後copy到服務器上去,不須要總體編譯。 asp.net
4. 版本化,不一樣版本的服務層能夠給客戶提供不一樣的服務。經過客戶的不一樣身份,定位到不一樣的Controller。 分佈式
等等,各類好處就不一一細說了。 ui
2. 系統的進一步分層,將Controllers,Filters,Models分拆 .net
接下來,咱們來個更完全的分離這個惟一的項目到多個項目。咱們新建一個MvcApplication2項目來作試驗 插件
咱們將裏面的Controllers,Filters,Models做爲三個項目獨立出來
咱們爲何要將Models獨立出來?有時候出前臺提交數據到Action直接包裝成了Model,若是涉及到數據的更改,業務的操做,咱們直接將此model做爲DTO(Data Transfer Object)會比較方便。爲何將Filters,controller獨立出來?你們能夠參考上面的論述去琢磨下。不須要修改任何代碼,只須要各個項目裏面添加對應的引用便可,而後F5運行,沒有任何問題。
3. 系統更進一步的分拆,將Area獨立到各個模塊。相似於插件式的系統開發
咱們模擬兩個模塊Admin和api,右鍵添加Area…,輸入Admin,右鍵添加Area…,輸入API,新增解決方案文件夾Admin,api,而後在這兩個文件夾下新建兩個Application,MvcApplication1.Admin和MvcApplication1.API,而後將Areas->Admin, Areas->API下面的文件所有剪切到剛剛建立的兩個項目下面。以下圖
接下來,咱們須要修改路由的註冊部分。將主程序裏面Controller的尋找的命名空間給明確下。
同理修改Admin和api模塊的AreaRegistration。
再接下來,咱們要添加這兩個子模塊的Build Events Post-build event:
mkdir "$(SolutionDir)$(SolutionName)\Areas\Admin\Views"
xcopy "$(ProjectDir)Views" "$(SolutionDir)$(SolutionName)\Areas\Admin\Views" /S /E /C /Y
將對應的View Copy 到主目錄。這是ASP.NET MVC Area尋找View的機制,除非咱們自定義ViewEngine。
而後build all,F5運行。
若是你認爲上面的作法比較麻煩,那麼能夠採用第二種方式,引用第三方庫MvcContrib。
在Package Manager Console裏面輸入:Install-Package MvcContrib,可是本人在mvc4下沒有試驗出來。下篇介紹asp.net mvc插件式架構