MvC 分离

  • 转自脑瓜子大神
  • 地址http://www.it165.net/pro/html/201402/9149.html
  • 一、开篇题外话

    我经常会在博客园逛来逛去,看过很多大牛们的Blog,我很少在这块技术天地活动,之前有发表过几篇日志,好像大部分是和电商有关,作为一个多年的开发人员,很少在这里分享,之前一直在CSDN上活动,因为我的Blog在那上边的排名1000多名,我想好好维护好CSDN,但是我发现越来越多的同行们都转战博客园。所以我也跟风来到此块宝地,我来了,你在哪?

    二、分离的优点

    1.松耦合:耦合是指一个系统的组件之间的相关程度。越少的组件相互依赖,那么这个系统的重用性和灵活性就越好。

    2.更好的团队分工合作,专门的工程师负责Controller

    三、背景

    在看博客园创始人@dudu博客的时候,发现他就是这样做的,这个是他的项目截图:

    我想,我的项目中应该也要这样来实现,下面我们一步一步来分解。

    四、实战

    1、新建一个空的MVC 项目,命名为:NaoGuaZi.MvcExample12。如何新建在此不作一一介绍,

    如果不分离的话,我们就开始在该项目下的Controllers文件夹添加Controller,但是我们现在的作法是将Controller作为一个单独的项目,这个项目仅仅用来做View的操作,那究竟怎么实现呢?

    具体请猛击下载源码

    2、新建一个类库,命名为NaoGuaZi.MvcExample12.Controllers 如下图所示

    3、在此类库中添加System.Web.dll,System.Web.Abstractions.dll,System.Web.Mvc.dll,System.Web.Routing.dl的引用,如下图所示

    4、新建一个 GlobalRoutesTable类,用来注册路由,通过该类衔接Controler与View,这个类会在View的Global.asax中Application_Start使用到。

    按照国际惯例上代码

    public static class GlobalRoutesTable
        {
            public static void RegisterRoutes(RouteCollection routes) {
                routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
                //default   routes
                routes.MapRoute(
                    "Default",
                    "{controller}/{action}/{id}",
                    new { controller = "Home", action = "Index", id = UrlParameter.Optional },
                    new string[] {"NaoGuaZi.MvcExample12.Controllers"}
                );
            }
        }

    6、新建类HomeController类,该类继承System.Web.Mvc.Controller

        public class HomeController:Controller {
            public ViewResult Index() {
                return View();
            }
        }

    7、将现有项目NaoGuaZi.MvcExample12.Controllers.dll添加到NaoGuaZi.MvcExample12项目中,然后在global.asax中的Application_Start中加入代码:

    NaoGuaZi.MvcExample12.Controllers.GlobalRoutesTable.RegisterRoutes(RouteTable.Routes);

    8、在NaoGuaZi.MvcExample12项目中的Views下新建Home文件夹,home文件夹下建index.cshtml 视图,然后Ctrl+F5运行项目,我们就可以看到成功运行的结果了。如下图所示:

    在实践过程中可能出现的错误汇总:

    错误1:如下图所示

    错误原因:View中已经注册了一个Default的路由

    解决办法:将Views中的默认的Default路由名称改成Default1或其他,或者将RegisterRoutes(RouteTable.Routes);注释掉。

    五、延伸

    可能大家会想到,如果在Controllers中建文件夹,这样更有利于层次分明,那该怎么实现呢?

    博客园创始人@dudu的解决方案中提到了用Area来解决,然后到最后他采纳了评论中的配置路由的方案,经过我的测试,这中方案测试不通过,所以还是采用Area的方式来实现。我们紧接上面的内容

    1、在NaoGuaZi.MvcExample12.Controllers项目中新建文件夹Admin

    2、在Admin文件夹下新建AdminAreaRegistration类,该类继承AreaRegistration

    3、在类中插入如下代码:

    public class AdminAreaRegistration : AreaRegistration {
            public override string AreaName {
                get {
                    return "Admin";
                }
            }
            public override void RegisterArea(AreaRegistrationContext context) {
                context.MapRoute(
                    "Admin_default",
                    "Admin/{controller}/{action}/{id}",
                    new { controller = "Home", action = "Index", id = UrlParameter.Optional },
                    new string[] {"NaoGuaZi.MvcExample12.Controllers.Admin"}
                );
            }
        }

    4、新建HomeController类继承Controller

    public ViewResult Index() {
                return View("~/Views/Admin/Home/Index.cshtml");
            }

    5、在NaoGuaZi.MvcExample12项目中的Views下新建Admin/Home文件夹,新建名为Index.cshtml视图。然后Ctrl+F5运行,在浏览器中输入http://localhost:端口号/admin/home/index即可成功访问。

    完整代码下载 VS2012打开,没有涉及到具体业务的实现,只涉及思想。

时间: 2024-08-03 10:11:57

MvC 分离的相关文章

MVC 分离Controllers-Views

将MVC中的Controllers.Model和View分别放到单独的项目中 Model: 新建-项目-Windows-类库 MVCTest.Model Controller:新建-项目-Windows-控制台应用程序 MVCTest.Bussiness Views:新建-项目-Web-Asp.Net MVC4 -默认- MVCTest.Web 在解决方案中安装EntifyFrameWork(三个解决方案中均安装). 如三层一样,MVCTest.Bussiness引用MVCTest.Model

结合公司的框架解决MVC的分离问题、【公司的入口和解决路由分发功能(url转为控制器和方法的使用)】

1.面向对象的语法需要进行一次比较细节的总结 [到面向对象之后完成了基础语法的复习] 2.ecshop做电商的网站[模拟这个框架] 安装ecshop中的upload包[进行配置:注意gd和mysql] 安装成功之后ecshop并不兼容php-5.4以上的版本,报错太多 [现在需要考虑的是做一套系统实现] [另外需要参考多个框架和项目(成型的系统二次开发)了解业务和思想] [重点] 3.设计一个框架[MVC框架思维] (1)框架设计中的第一条思路 首先实现逻辑和显示的分离[因为php本身是嵌入式的

iOS开发与设计模式 - MVC

iOS开发与设计模式 - MVC 最近在学习GoF的设计模式这本书,粗略的浏览了一遍,真是好书.好书就应该好好读,因此很有必要从实际的言语.项目理解设计模式. 我是做iOS开发的,自然就从这方面入手(脑). MVC iOS开发最基本的一个模式就是MVC, M指model,V指view,C指controller,有很多文章对它们是什么,它们的关系,它们如何交互进行了详细的说明,本文就不再展开说明了,仅放一张图供大家参考(来自斯坦福大学ios课程)  ViewController 是什么? 在iOS

Spring+Spring MVC+MyBatis实现SSM框架整合详细教程【转】

关于Spring+SpringMVC+Mybatis 整合,见还有不少初学者一头雾水,于是写篇教程,初学者按部就班的来一次,可能就会少走不少弯路了. 一:框架介绍(啰嗦两句,可自行度娘) 1.1:Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来.它是为了解决企业应用开发的复杂性而创建的

初步认识spring mvc

spring mvc 01Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的. 另外还有一种基于组件的.事件驱动的Web框架在此就不介绍了,如Tapestry.JSF等. Spring Web MVC也是服务到工作者模式的实现,但进行可优化.前端控制器是D

初学者对Spring MVC的认识

首先是要一定说明的是,这倒是说明是什么?对吧Spring MVC 是SpringFrameWork的后续产品,并且已经融入到Spring Web Flow中同时Spring MVC 分离了控制器,模型对象,分派器(其实我不知道这是什么)以及处理程序对象的角色,这种分离让它们更容易进行定制. 说了这些很官方的话,我都有点晕了,呵呵,先上一个原理流程图吧,相信会比较直观! Spring MVC 原理图 Spring MVC 对应原理流程步骤: 1.Web客户端 --> DispatcherServl

关于spring MVC机制,示例解读

spring MVC分离了控制器.模型对象.工作过程如下: 1.Spring mvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作.         2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller .        3.DispatcherServlet请请求提交到目标Controller .        4.Controller进行业务逻辑处理后,会返回一

构建基础的JavaScript MVC——视图和模板(二)

一.动态视图 1.现在渲染视图的方式基本上有2种 (1)服务端生成好html: (2)客户端渲染模板,服务端提供JSON数据接口. 2.客户端渲染视图也有2种方式: (1)使用document.createElement创建Dom元素,然后追加到页面: (2)预先定义HTML静态视图,在必要的时候显示和隐藏HTML片段: 二.模板 1.现在,有很多模板可以选择,比如Mustache.Underscore简单模板.Handlebars.EJS等等.模板引擎简单实用的方法,当然可以自己显示一个小的模

Spring MVC学习笔记--认识SpringMVC

Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块.使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还是 Struts 这样的 Web 框架.通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer Pages(JSP)技术.Velocity.Tiles.iText 和 POI.Spring MVC 框架并不知道使用的视图,所以不会强迫您只使用 JSP 技术.Spring MVC 分离了控制器.