1. 系統常見的分層
在開發asp.net mvc應用的時候,visual studio 給我們建立了預設的文件結構,一般情況下我們在一個專案下工作,參考微軟的官方例子:ContosoUniversity.sln
一般情況下我們可以將DAL單獨出來作為一個專案,最多還加一個介面Layer的專案,構成了簡單的三層架構模式。或者跟進一步講一部分業務獨立出來成為一個Business 層。分離出來的好處,相信大家都有體會:
1. 獨立出來的Layer或說元件,便於替換。特別是通過介面層的引入後,能夠做到程式不依賴於具體的實現類。特別是通過一些Ioc容器的注入,基本可以做到客戶端(呼叫介面的一端)程式的零修改。這也是設計模式裡講的對擴充套件開發,對修改關閉原則,里氏替換原則-依賴於抽象而不是具體的原則。
2. 大的專案中,方便於多個團隊的開發。比如不同的團隊可以開發不同資料訪問層,業務邏輯層。特別是在分散式系統開發過程中,服務端提供給客戶端只是方法的介面。
3. 可維護性,當某個模組出現bug的時候,你只需改改對應的位置,然後compile,然後copy到伺服器上去,不需要整體編譯。
4. 版本化,不同版本的服務層可以給客戶提供不同的服務。通過客戶的不同身份,定位到不同的Controller。
等等,各種好處就不一一細說了。
2. 系統的進一步分層,將Controllers,Filters,Models分拆
接下來,我們來個更徹底的分離這個唯一的專案到多個專案。我們新建一個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外掛式架構