爱上MVC~一个Action多套View模版的设计
模块化
这个问题是在做模块化设计时出现的,在Lind.DDD.Plugins模块里,需要对应的模块实体,模块管理者,模块标识接口等,开发时,如果你的功能点属于一个模块,需要实现IPlugins,而当实现了标识接口后,在应用程序启动时,会一次性将所有插件模块注册到你的系统里,在需要使用时,只要使用PluginManager管理者把对应的模块取出来即可,这个取出的过程是没有性能损耗的,它并不是反射!
更多Lind.DDD.Plugins的相关知识,请阅读大叔这篇文章《Lind.DDD.Plugins~插件模式的集成》
模块化在UI层的体现
本文主要问题是在设计出多个模块是,在UI层如何根据选中的模块,渲染出不同的VIEW来,这个问题不是新技术,只需要使用Html.Partial这个扩展方法即可以实现,而大叔要说的是,我们设计模块时,应该把所有模块放在一个统一的目录,新来的模块View只要放到module即可,由于模块核心内容都写在对应的module中,controller/action变得更加轻薄,这时,我们很容易使用autofac这些IoC工具把需要的模块对象动态生产出来,这也是Lind.DDD.Plugins要做的事情,只不过,为了性能考虑,我们在程序启动时已经把所有模块注册了,对于核心业务的action,所有模块共用一个即可,如列表action使用Index,添加action使用Create,而controller我们使用比较公用的名称,如商品管理Product,订单管理Order,而具体的手机项目product和order及PC端的product和order完全在对应的module里去实现(逻辑上的实现),而它们的action只会路由的转发,即根据项目去选择渲染哪一个View。
WEB MVC下面Module的组成
aaarticlea/png;base64,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" alt="" />
程序启动时注册Module这个特殊的路由模块,让我们的mvc程序可以找个Module下面的Views,这个只对需要有具体Action时用,如果你的module只有view,action都有公用模块实现了,就不需要注册下面代码了!
/// <summary>
/// 注册模块
/// </summary>
public class Module_routing : RazorViewEngine
{
public Module_routing()
{
//视图位置
ViewLocationFormats = new[]
{
"~/Views/{1}/{0}.cshtml",
"~/Views/Module/{1}/{0}.cshtml"
}; //分部视图位置
PartialViewLocationFormats = new[]
{
"~/Views/{1}/{0}.cshtml",
"~/Views/Shared/{0}.cshtml",
"~/Views/Module/Shared/{0}.cshtml",
"~/Views/Module/{1}/{0}.cshtml"
};
} public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache)
{
return base.FindView(controllerContext, viewName, masterName, useCache);
} public override ViewEngineResult FindPartialView(ControllerContext controllerContext, string partialViewName, bool useCache)
{
return base.FindPartialView(controllerContext, partialViewName, useCache);
}
}
在程序启动时,把它的实例注册进来
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
RegisterView_Custom_routing();
} protected void RegisterView_Custom_routing()
{
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new Module_routing());
}
而在公用的action里,一般来说,会接收一个moduleName或者ModuleId这种属性,然后生产对应的模块对象,把对象的结果传给对应的View即可。
public ActionResult Index(string module)
{
var model=Plugins.PluginManager.Resolve<IShop>("module").GetModel();//这个地方不是反射,只是从容器里把对应的实例取出来
return View(model);
}
在主View上进行渲染对应项目的PartialView,同时把Model传给对应的View,一般代码如下
<ul>
<li>@Html.ActionLink("pc端", "index", new { module = "pc" })</li>
<li>@Html.ActionLink("h5端", "index", new { module = "h5" })</li>
<li>@Html.ActionLink("pad端", "index", new { module = "pad" })</li> </ul>
@Html.Partial("~/views/module/"+Request.QueryString["module"] + "/index.cshtml",Model) <!-- 渲染对应的模块下的页面,Model由公用action返回 -->
这样产生的好处就是,当你添加新的module时,只需要维护对应的Project即可,然后把主网站的Views/Module文件夹更新,同时在module数据表中添加新的模块,就实现的新模块对老项目的集成!这一切可以说与原项目是解耦合的,它们可以在不同的解决方案中完成,各自负责各位的业务逻辑!
aaarticlea/png;base64,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" alt="" />aaarticlea/png;base64,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" alt="" />
感谢各位对大叔框架的支持!
同时希望大家多多支持咱们.Net跨平台社区,支持善友大牛!
爱上MVC~一个Action多套View模版的设计的更多相关文章
- View模版的设计
一个Action多套View模版的设计 回到目录 模块化 这个问题是在做模块化设计时出现的,在Lind.DDD.Plugins模块里,需要对应的模块实体,模块管理者,模块标识接口等,开发时,如果你 ...
- MVC一个action对应多个视图的写法
一,如下代码 using System; using System.Collections.Generic; using System.Linq; using System.Web; using Sy ...
- .net mvc 一个Action的 HttpGet 和 HttpPost
http://www.cnblogs.com/freeliver54/p/3747836.html 本文转自:http://stackoverflow.com/questions/11767911/m ...
- 爱上MVC~为Html.EditorForModel自定义模版
回到目录 挺有意思的一件事 对于MVC视图渲染来说,大家应该不会陌生,但对于模型的渲染,不知道是否听说过,主要是说Model通过它属性的相关特性(DataType,UIHint)来将它们自动渲染到Vi ...
- ASP.NET MVC中Section、Partial View 和 Child Action(转载)
概括的讲,View中的内容可以分为静态和动态两部分.静态内容一般是html元素,而动态内容指的是在应用程序运行的时候动态创建的内容.给View添加动态内容的方式可归纳为下面几种: Inline cod ...
- Spring MVC 中采用注解方式 Action中跳转到另一个Action的写法
Spring MVC 中采用注解方式 Action中跳转到另一个Action的写法 在Action中方法的返回值都是字符串行,一般情况是返回某个JSP,如: return "xx" ...
- MVC:一个View显示多个Model(多个Model你可以使用ViewBag或ViewData , 或者:Model["myInfo"] as)
MVC:一个View显示多个Model 多个Model你可以使用ViewBag或ViewData , 或者:Model["myInfo"] as. 比如: Tuple<str ...
- ASP.NET MVC 5 入门教程 (4) View和ViewBag
文章来源: Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc-5-get-started-view.html 上一节:ASP.NET MVC 5 入门教 ...
- 白话学习MVC(八)Action的执行二
一.概述 上篇博文<白话学习MVC(七)Action的执行一>介绍了ASP.NET MVC中Action的执行的简要流程,并且对TempData的运行机制进行了详细的分析,本篇来分析上一篇 ...
随机推荐
- C# 基础(7)--线程
进程与线程 一个程序就是一个进程,进程包含线程,多个线程之间可以“并发”执行(确切的说是不停地切换),CPU是跟线程打交道的. 线程是程序的一个执行流,每个线程都有之间专有的寄存器(栈指针.程序计数器 ...
- 实验 2 用C语言编写简单程序
#include<stdio.h> int main() { int x,y; printf("enter x:"); scanf("%d",&am ...
- jquery中是否加()的问题
自己总结的,慢慢修改再: 1带上()代表立即执行 去掉()代表当有事件发生的时候,我再执行
- 【学习】JAVA的第一天(补)
补上1024第一天的JAVA学习,也刚好是程序员节.今天学习了JAVA的一些历史和基础环境的配置,以及HelloWorld入门程序. JAVA体系:JAVAME(一些简单的移动端开发).JAVAEE( ...
- 小试牛刀--利用豆瓣API爬取豆瓣电影top250
最近得赶进度爬点东西,对于豆瓣,它为开发者提供了API,目前是v2版本,目前key不对个人开放,但是可以正常通过其提供的API获取数据.豆瓣V2版API权限分3类:公开.高级.商务,我们用开放基本数据 ...
- java 数据导入到exc ,并下载
package com.lizi.admin.controller.platform.excel; import java.util.List;import java.util.Map; import ...
- VMware克隆虚拟机,克隆机网卡启动不了解决方案
Shutting down loopback interface: [ OK ] Bringing up loopback interface: [ OK ] Bringing up interfac ...
- ios xcode 下 报出 ”xx“is missing from working copy 的问题
在项目中提交过svn后,再在本机上删除不用的图片资源后,build后会有 ”xx“is missing from working copy 的警告.在网上找了些资料后,总结下. 直接在终端下用s ...
- [UCSD白板题] Binary Search
Problem Introduction In this problem, you will implemented the binary search algorithm that allows s ...
- 黑马程序员-scanf函数
变量的内存:字节和地址:1.变量的存储单位是字节,每个字节都有存储地址.2.不同的数据大小占用的内存带下不同拥有的字节数也是不同的.变量的存储:1.存储是按照,先存储的放在地址教高的位置,优先存储的地 ...