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

Asp.net mvc 各个组件的分离的更多相关文章

  1. ASP.NET MVC分页组件MvcPager 2.0版发布暨网站全新改版

    MvcPager分页控件是在ASP.NET MVC Web应用程序中实现分页功能的一系列扩展方法,该分页控件的最初的实现方法借鉴了网上流行的部分源代码, 尤其是ScottGu的PagedList< ...

  2. ASP.NET MVC 实现区域 项目分离 (比较好的方式)

    说明: ZRT.Web 是前台网站,目录[D:\ZRT.Web\] ZRT.Admin 是后台管理,目录[D:\ZRT.Web\Applications\Admin\],删除文件[Global.asa ...

  3. ASP.NET MVC 5 访问在views文件夹中的JS文件。 ASP.NET MVC html与JS分离

    修改VIEWS文件夹下的web.config文件, 加入下面红色字标识的内容:    <system.webServer>     <handlers>       <r ...

  4. ASP.NET MVC掉过的坑_MVC初识及MVC应用程序结构

    APS.Net MVC 浅谈[转] 来自MSDN 点击访问 MVC 理论结构 模型-视图-控制器 (MVC) 体系结构模式将应用程序分成三个主要组件:模型.视图和控制器. ASP.NET MVC 框架 ...

  5. ASP.NET MVC 3 初认知

    什么是ASP.NET MVC 1. asp.net mvc 是微软官方提供的mvc模式编写asp.net web应用程序的框架. 2. 是微软既asp.net webForm 后的又一种开放方式,而非 ...

  6. ASP.NET MVC概述

    原文:http://www.asp.net/mvc/tutorials/older-versions/overview/asp-net-mvc-overview 这篇文章帮助你了解关于ASP.NET ...

  7. 26、ASP.NET MVC入门到精通——后台管理区域及分离、Js压缩、css、jquery扩展

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 有好一段时间没更新博文了,最近在忙两件事:1.看书,学习中...2.为公司年会节目做准备,由于许久没有练习双截棍了,难免生疏,所以现在临时抱 ...

  8. ASP.NET MVC使用Bootstrap系列(3)——使用Bootstrap 组件

    阅读目录 Bootstrap 导航条 列表组 徽章 媒体对象 页头 路径导航 分页 输入框组 按钮式下拉菜单 警告框 进度条 小结 Bootstrap为我们提供了十几种的可复用组件,包括字体图标.下拉 ...

  9. React+BootStrap+ASP.NET MVC实现自适应和组件的复用

    系统展示如下 1.前端采用bootstrap3进行架构 2.后端采用asp.net mvc进行开发 开发工具vs2010 mvc4需要安装sp1的补丁. 3.js组件的封装采用react 1.新建mv ...

随机推荐

  1. html中a标签href属性的一个坑

    由于公司需要,小菜最近在搞app web开发,目前只有ios和android版本,虽然仅此两个版本,但是依然要考虑浏览器兼容性问题,因为android和ios默认浏览器内核是不一样的. 先说说兼容性问 ...

  2. [BTS] Error Can't update assemblies.

    Removal of the assembly failed. Make sure that all items in the assembly you are trying to remove fu ...

  3. cookie入门与学习

    据我对cookie诞生背景的了解,cookie是由网景公司创建的,目的就是将用户的数据储存在客户端上.伴随的HTML5的出现,现在又有另外一个解决数据离线储存的方案,就是HTML5中的Web stor ...

  4. 虚拟机锁定文件失败,开启模块snapshot失败解决办法

    今天由于没有正常关闭虚拟机,导致出现打开虚拟机提示:锁定文件失败 虚拟机开启模块snapshot失败,后来从网上找打了资料解决了.解决办法:一:打开你存放虚拟机系统文件的文件夹,注意,是系统文件,不是 ...

  5. iOS开发之静态库(六)—— 时空之争

    前面的所有试验中,我们的静态库都支持了所有可能的指令集(i386, x86_64, armv7, armv7s, arm64),最大限 度的匹配了所有可能运行该代码的设备,使代码在当前存在的几乎所有i ...

  6. MySQL的几种连接 join/inner join/cross join/逗号/left join/right join/natural join

    转载请注明出处!! 之前数据表连接操作多使用逗号或者join,对几种连接的概念一直浑浑噩噩,最近研究了一波,把这些连接的区别搞明白了.   连接:A xjoin B(主表 操作 关联表)  selec ...

  7. JS_Ajax基础

    一:Ajax ajax 的全称是Asynchronous(异步) JavaScript and XML 在不刷新页面的情况下从服务器获取,提交数据的一种数据交互方式; 二:Ajax使用步骤概括 //1 ...

  8. [GO编程] GO入门语法基础

    学习一门语言,首先肯定是要熟悉他的语法,然后才可以进行编程开发,虽然本人使用过C++,.net等语言,不过对于GO的一些新特性还是需要多多熟悉,否则即使看得懂也写不出程序来.今天我们就开始我们的GO ...

  9. 【地图API】收货地址详解2

    上次讲解的方法是: 在地图中心点添加一个标注,每次拖动地图就获取地图中心点,再把标注的位置设置为地图中心点.可参考教程:http://www.cnblogs.com/milkmap/p/6126424 ...

  10. Linux下查看mysql、apache是否安装,安装,卸载等操作

    Linux下查看mysql.apache是否安装,并卸载. 指令 ps -ef|grep mysql 得出结果 root               ?        :: /bin/sh /usr/ ...