我们在实际应用开发中,经常遇到多人共同开发维护同一个项目情况,所以不免会出现其中一个人代码出现bug质量问题导致整个项目就原地“爆炸”的惨状。在之前公司经常遇到某个人忘记更新(我就做个此事["害羞脸"])直接签入或者出现他自己的类库引用而其他人没有引用此类库导致的项目无法编译,总之由于大家编译同一个工程,耦合度太高。最近在公司也发现同样问题,今天就讲讲如和拆分项目达到降低模块间的耦合度
首先做过MVC的同学就知道在MVC中有域的概念(就是在一个大的MVC下就拆分处多个子MVC,理论上可以无限极创建子MVC)
一:创建MVC域
这是完整的一个MVC项目
 
假设有这样一个场景:有同事需要在此MVC项目下写全新的模块:
按照传统的方式全新的模块继续在此MVC中,大家共同维护,签出代码就得把和自己无关的代码也签下来(做了七八年的项目日积月累代码量还是很庞大的),而且是一个人的错误可能会导致整个MVC项目无法运行
现在我们给这个的模块创建一个全新MVC工程,使之脱离先前的束缚。
第一步:
右键MVC项目-->添加--->区域---->输入区域名称,这里我们起叫LYL
此时就会多出一个叫Areas域的文件夹,理论上可以无限创建域
  namespace Momoda //路由域的代码
{
public class LYLAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "LYL";
}
} public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"LYL_default",
"LYL/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
//此处在之后得稍作改动
);
}
}
}
注意:方便起见建议把Momoda.Web下的所有类的命名空间改为同一个(右键属性如下:
 
)
此时域还在最外面的Momoda.Web下,如和把域作为一个工程脱离Momoda.Web 呢?
此时LYL域下的MVC不算工程所以没有工程文件。关键就是让这个域有工程文件csproj,所以需要创建新的MVC项目生成这个工程文件后就可以在外部用添加现有项目的方式创建独立的模块进行开发,不用在Momoda.Web下进行开发
第二步:
我们把LYLAreaRegistration 拖出到LYL外Areas下,然后排除LYL文件夹,如下:
然后再创建一个完整的MVC起名叫LYL.MVC,并且把App_Start文件删除(因为域的路由是靠LYLAreaRegistration文件)在资源管理器中替换掉Areas下的LYL文件夹
注意:替换后必须要把LYL.MVC 文件夹重命名为之前创建的域名LYL,否则无法路由
第三步:
右键LYL解决方案添加现有项目在LYL域下找到工程文件 ( \LYL\Momoda.Web\Areas\LYL)
这样就把Momoda.Web下的LYL域给拆分出来,开发过程中只关注LYL.MVC即可,如下图:
虽然LYL.MVC 看起来是独立的项目,起始他还是Momoda.Web下的域,Momoda.Web相当于母版页,LYL.MVC 相当于子页面
第四步:
由于把LYL.MVC拆分出来后如和从Momoda.Web路由到LYL.MVC域呢?
之前创建域的时候生成了LYLAreaRegistration 域的路由文件文件,现在加一行代码即可结束MVC的项目拆分
 context.MapRoute(
name:"LYL_default",
url:"LYL/{controller}/{action}/{id}",
defaults:new { action = "Index", id = UrlParameter.Optional },
namespaces:new string[] { "LYL.Controllers" }//添加此行代码
);
注意:LYL.Controllers 是LYL域下的Controllers的命名空间,为何是域的命名空间这就不用多说了?(
由于我们把域拆分成一个项目,也就相当于是另一个程序集,所以要显式的指明命名空间,如果不把域拆分成一个独立的项目,此路由文件的namespaces参数是有默认值(当前命名空间),这就是为什么我们第一步创建域的时候没有此参数)
这是域LYL.MVC下的控制层代码:
注意此命名空间必须和上面namespaces的参数值 "LYL.Controllers" 一样
 
 
这样就达到访问Momoda.Web跨项目路由到域LYL下的LYL.MVC
到这里就结束了
下一篇讲解如和拆分MVCAPI,从而使开发人员只关注和自己有关的模块而不影响其他模块

MVC跨项目路由的更多相关文章

  1. MVC Api 的跨项目路由

    现有Momoda.Api项目,由于团队所有人在此项目下开发,导致耦合度太高,现从此接口项目中拆分出多个子项目从而避免对Momda.Api的改动导致“爆炸” MVCApi的跨项目路由和MVC有解决方式有 ...

  2. MVC 设置项目默认起始页和多级目录的路由配置

    我们新建一个MVC的项目 默认的路由是这样的,但是由于一些需求,我们需要对Controllers按照一些规则分类. 比如说我们在Controllers下面建了一个School的文件夹,然后建了一个St ...

  3. 第2章 ASP.NET MVC(URL、路由及区域)

    * { font: 17px/1.5em "Microsoft YaHei" } ASPNET MVC URL.路由及区域 一.URL.路由及区域 一.      配置路由器 1. ...

  4. 【翻译】ASP.NET MVC 5属性路由(转)

    转载链接:http://www.cnblogs.com/thestartdream/p/4246533.html 原文链接:http://blogs.msdn.com/b/webdev/archive ...

  5. MVC 支持同名路由,不同命名空间

    有时候我们会碰到两个项目合在一起,那么必然会碰到两个同名的controller,其实MVC在注册路由,添加Route的时候可以指定当前规则解析那个命名空间下的所有Controller. 注:Contr ...

  6. 为ASP.NET MVC应用添加自定义路由

    这里,我们将学习如何给asp.net mvc应用添加自定义路由.用自定义路由来修改默认路由表. 对一些简单的asp.net mvc应用,默认的路由表就已经足够了.但是,当你需要创建特殊的路由时,就需要 ...

  7. MVC中的路由

    authour: chenboyi updatetime: 2015-05-02 16:10:04 friendly link:   目录 1,思维导图 2,MVC处理机制简图(讲解路由解析) 3,默 ...

  8. 005. Asp.Net Routing与MVC 之三: 路由在MVC的使用

    上次讲到请求如何激活Controller和Action,这次讲下MVC中路由的使用.本次两个关注点: 遗留:ModelBinder.BindModel的过程 MVC中路由的使用 MVC 5中的Acti ...

  9. 【MVC】ASP.NET MVC 4项目模板的结构简介

    引言     在VS2012新建一个窗体验证的MVC 4项目后,可以看到微软已经帮我们做了很多了,项目里面该有的都有了,完全可以看成一个简单网站.作为开发,能理解里面文件结构和作用,也算是半只脚踏进M ...

随机推荐

  1. iOS开发 适配iOS10

    2016年9月7日,苹果发布iOS 10.2016年9月14日,全新的操作系统iOS 10将正式上线. 作为开发者,如何适配iOS10呢? 1.Notification(通知) 自从Notificat ...

  2. SQL字符串函数

    LEN() :计算字符串长度(字符的个数.)datalength();//计算字符串所占用的字节数,不属于字符串函数.测试varchar变量与nvarchar变量存储字符串a的区别.见备注1.LOWE ...

  3. Kafka:主要参数详解(转)

    原文地址:http://kafka.apache.org/documentation.html ############################# System ############### ...

  4. sqlserver批量修改首字母为大写

    'hello world'  ---->   'Hello world' update tableName set columnName=CHAR(ASCII(SUBSTRING(columnN ...

  5. 如何搭建git服务器

    一.前言 现在越来越多的公司用git进行版本控制,不过git是默认是开源的,如果私有的话是需要付费的,如果不想付费自己可以搭建一个git服务器用来版本控制. 二.服务器端操作 1.安装git sudo ...

  6. [每日Linux]Linux下xsell和xftp的使用

    实验缘由: 1.xsell在Linux下的作用就是远程登录的一个界面,也就是实现访问在Windows下访问Linux服务器的功能.之前在数据挖掘实验中因为自己电脑的内存不够,曾经使用过实验室的服务器跑 ...

  7. Web 前端攻防(2014版)

    在百度 FEX 团队时写的.有次让我写点前端开发中注意的安全规范,结果写着写着就跑题了,写了一堆纯前端实现的攻击方式...当然还有防范措施. 文章就懒得粘过来了~ 直接贴个地址算了:) http:// ...

  8. 从零开始,DIY一个jQuery(3)

    在前两章,为了方便调试,我们写了一个非常简单的 jQuery.fn.init 方法: jQuery.fn.init = function (selector, context, root) { if ...

  9. Fedora 21 安装 Nvidia 驱动以及失败后的补救方法

    在 Linux 桌面系统下玩了这么久,大部分时间都是使用 Ubuntu,偶尔使用一下 Fedora.我的电脑中安装有多个 Linux 发行版,见这里<在同一个硬盘上安装多个Linux发行版及Fe ...

  10. Java回调方法详解

    回调在维基百科中定义为: 在计算机程序设计中,回调函数,是指通过函数参数传递到其他代码的,某一块可执行代码的引用. 其目的是允许底层代码调用在高层定义的子程序. 举个例子可能更明白一些:以Androi ...