MVC4 Model View Controller分离成独立项目
适合人群:了解MVC项目的程序员
开发工具:vs2012
开发语言:C#
小项目或功能比较单一的项目可以直接新建一个MVC基本项目类型即可,但随着需求不断迭代,项目的功能模块越来越多,甚至有些模块可以独立开发,这时就要考虑主项目的M/V/C三大部分分离,便于不同角色的工程师专注自己的部分开发、更新及发布部署。
下面从主项目CSDN开始,逐步实现M/V/C三大部分的分离:
一、新建一个MVC4主项目,项目名称是CSDN,如图示:
假设主项目CSDN是官网站点,即用户输入官网域名直接访问打开的站点,默认打开的页面是首页(http://www.csdn.net/home/index)。新建Home控制器、Index视图,如图示:
打开app_start/routeconfig.cs文件,确认站点默认是否是/home/index
Index视图页面代码如下:
右击主项目,调试启动运行:
浏览器打开的页面如下:
到此,主项目创建完成,并成功运行。
二、分离控制器,新建一个类库项目,命名CSDN.Controllers.Main
重命名默认创建的类文件class1.cs为HomeController.cs,打开文件留意引用的命名空间,与主项目的Home控制器文件对比
所以在刚创建的类库项目CSDN.Controllers.Main中需引用缺少的命名空间system.web
这些DLL引用的路径,请参考主项目对应的文件,右击-属性查看
按以上方法,逐个引用完成后,如图示:
在主项目CSDN中引用已分离出来的控制器类库CSDN.Controllers.Main
修改routeconfig.cs文件代码如下:
删除主项目原来的controller文件夹及其下的控制器文件,
删除后,编译再次运行主项目CSDN,可见和之前打开的首页面是一样的,说明控制器分离成功。
三、分离数据模型Model,这个比较简单了,同上新建一个类库项目CSDN.Models.Main,class1.cs更名为MainModel.cs,如图示:
在分离的控制器项目中引入Model项目,并修改homecontroller中的index方法代码如下:
在view Index.cshtml页面中显示数据模型的信息,先在主项目CSDN中引入CSDN.Models.Main,并修改view文件夹下的webconfig文件,引入数据模型命名空间:
运行主项目CSDN后,浏览器页面显示如下:
四、分离视图View(重点),到此已经完成了控制器、数据模型的分离,如果只有一个官网模块,似乎没必要分离视图,默认在主项目CSDN中也挺好。但是,如果功能模块增加:后台管理Admin、博客Blog、商城Shop等等,则有必要分离各部分的视图在独立的MVC项目中。
以后台管理Admin举例,先在主项目CSDN中添加Areas/Admin,如图:
因为已经分离了controller、model,所以删除Areas/Admin下默认创建的控制器、数据模型文件夹:
现在有必要新建解决方案文件夹Controllers、Models、Views,把相应的独立项目归类到对应的文件夹下:
在Views文件夹下新建一个MVC4基本项目CSDN.Admin,这个就是后台管理项目,同理可删除其下的控制器、数据模型文件夹:
将主项目中的Areas/Admin/AdminAreaRegistration.cs文件剪切到上面的CSDN.Admin项目根目录下,
按以上分离控制器的方法,分离后台管理模块的控制器,在Controllers文件夹下新建类库项目CSDN.Controllers.Admin
在CSDN.Admin项目中新建视图文件Index.cshtml
该项目中需引用控制器项目CSDN.Controllers.Admin,并修改app_start/routeconfig文件代码如下:
直接运行项目CSDN.Admin,页面显示如下:
但这并不是我们最终目的,我们要的是运行主项目CSDN,浏览器输入http://localhost/admin/home/index时,也可以看到如上页面效果。此时还需修改CSDN.Admin/AdminAreaRegistration.cs文件代码
将CSDN.Admin项目中的View文件夹下的视图文件home整个文件夹,复制到主项目CSDN/Areas/Admin/Views下:
在主项目CSDN中引用项目CSDN.Admin,然后运行主项目,默认还是打开之前的官网页面,此时接着在浏览器URL输入/admin/home(或/admin/home/index)回车,即可看到后台管理页面。
源代码下载地址:http://download.csdn.net/detail/cdblh/9840202
此文档下载地址:http://download.csdn.net/detail/cdblh/9840201
还可以继续优化,比如:
1. 手动复制视图文件到主项目中,可以配置生成事件自动完成。
2. 主项目发布后,Areas下的模块可以配置独立的二级域名访问http://admin.csdn.net,代替http://www.csdn.net/admin
3. 还可以
MVC4 Model View Controller分离成独立项目的更多相关文章
- MVC(Model View Controller)框架
MVC框架 同义词 MVC一般指MVC框架 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一 ...
- 深入浅出Java MVC(Model View Controller) ---- (JSP + servlet + javabean实例)
在DRP中终于接触到了MVC,感触是确实这样的架构系统灵活性不少,现在感触最深的就是使用tomcat作为服务器发布比IIS好多了,起码发布很简单,使用起来方便. 首先来简单的学习一下MVC的基础知识, ...
- MVC模式(Model View Controller)下实现数据库的连接,对数据的删,查操作
MVC模式(Model View Controller): Model:DAO模型 View:JSP 在页面上填写java代码实现显示 Controller:Servlet 重定向和请求的转发: 若 ...
- Model View Controller (MVC) Overview
By Rakesh Chavda on Jul 01, 2015 What is MVC?Model View Controller is a type of user interface archi ...
- Model View Controller(MVC) in PHP
The model view controller pattern is the most used pattern for today’s world web applications. It ha ...
- What is the difference between Reactjs and Rxjs?--React is the V (View) in MVC (Model/View/Controller).
This is really different, React is view library; and Rxjs is reactive programming library for javasc ...
- Model View Controller
On the iPhone or iPod touch, a modal view controller takes over the entire screen. This is the defau ...
- 设计模式 --- 模型-视图-控制器(Model View Controller)
模型-视图-控制器(Model-View-Controller,MVC)是Xerox PARC在20世纪80年代为编程语言Smalltalk-80发明的一种软件设计模式,至今已广泛应用于用户交互应用程 ...
- ASP.NET MVC Area使用-将Area设置成独立项目
环境说明:Vistual Studio 2013 MVC 4.0 其实关于ASP.NET MVC Area使用的基础知识可以参考 http://www.cnblogs.com/willick/p/33 ...
随机推荐
- 3-OpenResty 配置PHP
由于咱以前是用PHP做的东西,又不想重新用 OpenResty自带的编写,所以呢咱设置下,可以像以前Apache那样访问PHP文件 首先去下载 PHP https://windows.php.net/ ...
- [RN] React Native代码转换成微信小程序代码的转换引擎工具
React Native代码转换成微信小程序代码的转换引擎工具 https://github.com/areslabs/alita
- Mysql连接驱动与Java之间的版本不匹配问题(Mysql-connector-java与Java、Mysql版本对应关系)
一.问题如下: 我使用的是jdk12.0.1,jdk12在使用kettle时找不到能匹配的驱动版本来连接mysql: 我尝试过很多mysql连接驱动版本都直接报错,于是我将jdk版本降到了jdk8,结 ...
- 【IntelliJ IDEA学习之六】IntelliJ IDEA 调试
版本:IntelliJIDEA2018.1.4 一.设置热部署1.自动编译 2.配置hotswap 3.开启compiler.automake.allow.when.app.running CTRL ...
- SVN与GIT工具使用对比
版本工具 差异 svn git 系统特点 1.集中式版本控制系统(文档管理很方便) 2.企业内部并行集中开发 3.windows系统上开发推荐使用 4.克隆一个拥有将近一万个提交(commit),五个 ...
- JMeter扩展插件实现对自定义协议进行支持 转
本文版权归xmeter.net 所有.欢迎转载,转载请注明出处. 摘要## JMeter本身提供了插件机制,允许第三方扩展JMeter以支持JMeter不支持的协议的测试.本文以扩展一个简单的Apac ...
- 公众号后台开发(SpingMVC接收与响应公众号消息)
1.准备 1.准备服务 与微信对接的url要具备以下条件: (1)在公网上能够访问 (2)端口只支持80端口 在这里如果是公网能够访问的服务最好,也可以通过花生壳或者其他外网映射工具进行映射,比如ng ...
- Java学习之旅(一):探索extends
鄙人为兴趣爱好,0基础入门学习Java,有些心得想法,记录于此,与君分享. 然毕竟新手,学识尚浅,错误之处,希望多多指正批评,也是对我最大的帮助! 前言:本篇文章,主要讨论在子类继承父类之后,一些继承 ...
- requests获取响应时间(elapsed)与超时(timeout)、小数四舍五入
前言 requests发请求时,接口的响应时间,也是我们需要关注的一个点,如果响应时间太长,也是不合理的.如果服务端没及时响应,也不能一直等着,可以设置一个timeout超时的时间 elapsed官方 ...
- Oracel 数据库表操作
表结构操作 创建表 create table tableName (id varchar2(36) primary key, name varchar2(36), age number(12,2), ...