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插件式架构