在继续学习Model的实践经验之前,先思考一下Controller和View的实践原则在本次系统重构中的应用,我手上是一个后台管理系统(不是门户系统、不是具体业务系统),通俗点讲就是给企业的运维人员用的一套系统。

后台运维系统最核心的就是导航菜单,一切工作从导航菜单开始,从UI结构上来讲就是典型的左右结构(左边导航右边操作区域),主流的Web UI框架都有这种结构的Layout。再深入一层的核心是资源(这个不具备通用性,只是我手上现有系统的设计理念而已):导航菜单是资源,企业组织结构是资源,用户是资源,权限是对资源的权限.....

粗略分析一下资源的获取流程及业务规则:

  1. 获取客户端参数,具体规则:参数可能是指定某类型的资源,也可能是指定某个具体的资源
  2. 根据参数找到所需要的资源,具体规则:根据参数从Model中获取数据,当然数据经过了权限过滤
  3. 返回给客户端

针对这种情况,相关的Controller的组织方案有很多:

  • 不同类型的资源建立不同的Controller,在View中需要导航菜单的地方呼叫导航菜单的Controller,在View中需要组织结构的地方呼叫组织结构的Controller...
  • 在单个Controller中通过不同的Action来处理不同类型的资源的访问。创建ResourceController,在其中创建CreateNavMenu、CreateUser、CreateOU等Action
  • 在单个Controller中通过同一个Action来处理不同类型的资源的访问。在ResourceController中用一个名称为Create的Action来处理不同类型的资源的添加操作

后面两种方案尽管将业务流程放入Controller中,而业务流程中的具体业务规则放入Model中,但由于本系统中资源的类型是动态的,这两种方法会让Controller和View越来越不轻巧,或者Action个数越来越难以控制,或者Action内部的逻辑代码越来越复杂。第一种方案将业务流程实际上分散在"组织"(这里当动词用,即增加一种类型的资源时,要增加对应的Controller)中了,当资源的类型越来越多时,只要遵循这个"分散的规则"就可以优雅的增加新的功能,这不会减少代码量的增加,但能持续保持代码结构的清晰(这是从"管理"的角度来看这个结论而不是技术实现角度,对我的重构目标是合适的,如果你看到这篇文章,注意不要对你造成误导)。

因此建立以下区域规则:

创建名称为Core的区域,用来组织纯粹的系统自身管理的Controller和View。本系统中后台管理的基础是资源,所以会有一个名称为ResourceController的控制器,

因为是后台管理,从UI结构上来讲重构后还是典型的左右结构(左边导航右边操作区域),主流的Web UI框架都有这种结构的Layout,从这个角度出发,第一个Controller是导航菜单(定名为NavMenuController),这个Controller就是单纯的返回Json类型的导航菜单数据,通过JQuery在View中接收并显示。然后会有身份验证及授权两个Controller,

Microsoft 2013 新技术学习笔记 四的更多相关文章

  1. Microsoft 2013 新技术学习笔记 一

    有几年没有关注技术了,最近有点时间想把技术重新捡起来,借着重构手上的一个后台管理框架的机会将微软新的几种技术全部应用一下,从目的上来讲并没有希望能对涉及的技术有很深入的了解,所以这个系列的文章(篇幅不 ...

  2. Microsoft 2013 新技术学习笔记 三

    什么是代码结构的组织?asp.net MVC 5 默认创建出的几个目录的标准含义分别如下: Controllers目录存放MVC模式中的Controler Models目录存放MVC模式中的Model ...

  3. Microsoft 2013 新技术学习笔记 二

    在探讨系统重构的代码结构组织之前,先初步考虑框架与数据库的交互,在.net平台上数据访问方案有人总结为三类:DataSet.ADO.net 2.0.ORM组件.我只熟悉ADO.NET方式,众多的企业特 ...

  4. C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻

    前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...

  5. IOS学习笔记(四)之UITextField和UITextView控件学习

    IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...

  6. java之jvm学习笔记四(安全管理器)

    java之jvm学习笔记四(安全管理器) 前面已经简述了java的安全模型的两个组成部分(类装载器,class文件校验器),接下来学习的是java安全模型的另外一个重要组成部分安全管理器. 安全管理器 ...

  7. Learning ROS for Robotics Programming Second Edition学习笔记(四) indigo devices

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

  8. Typescript 学习笔记四:回忆ES5 中的类

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  9. ES6学习笔记<四> default、rest、Multi-line Strings

    default 参数默认值 在实际开发 有时需要给一些参数默认值. 在ES6之前一般都这么处理参数默认值 function add(val_1,val_2){ val_1 = val_1 || 10; ...

随机推荐

  1. 微软BI 之SSIS 系列 - 使用 Script Component Destination 和 ADO.NET 解析不规则文件并插入数据

    开篇介绍 这一篇文章是 微软BI 之SSIS 系列 - 带有 Header 和 Trailer 的不规则的平面文件输出处理技巧 的续篇,在上篇文章中介绍到了对于这种不规则文件输出的处理方式.比如下图中 ...

  2. OpenWrt资料汇总

    上周末折腾了一下OpenWrt,打算把Facebook的网络模拟工具部署到上面,最终以失败告终.上github看,发现已经有人给作者提了issue,作者表示部署在OpenWrt上会很有用,但确实在Op ...

  3. 隐藏路由器的WIFI信号,防蹭网

    进入路由器的管理界面 最后别忘了 现在信号隐藏了,现在说一下如何用手机连接隐藏的路由器

  4. mysql 5.6.17 x64 安装

    下载地址 百度网盘地址:http://pan.baidu.com/share/link?shareid=1895747668&uk=3257050114&fid=234538452 官 ...

  5. 02_Hello World!

    hello word ? 学习任何语言,我们都喜欢在屏幕上直接输出一点什么,作为最简单基本的案例.很多人习惯输出 hello world ,世界你好.感觉很有情况的样子——然而很多人都只停留在这个阶段 ...

  6. atitit.j2ee 1.5 1.6 的不同跟 Servlet 3.0新特性总结

    atitit.j2ee 1.5 1.6 的不同跟 Servlet 3.0新特性总结 1. jar比较,j2ee 1.6 添加了许多的jar 1 2. ,Servlet 3.0 2 2.1. 可插性   ...

  7. 套路!从Ruby 到 Cocoapods的发布

    前言: 现在的社会讲究的是套路,作为一名iOS工程师, 一言不合我要发套路了! 一.Ruby(ruby环境已经安装了的朋友可以跳过这一点) 准备: Mac OSX 安装xcode,它会帮你安装好 Un ...

  8. IIS7 HTTPS 绑定主机头

    IIS7下面默认HTTPS绑定是无法指定主机头的,但我们可以通过手工修改IIS配置来实现主机头绑定. 打开C:\Windows\system32\inetsrv\config\applicationH ...

  9. Crontab中shell每分钟执行一次HDFS文件上传不执行的解决方案

    一.Crontab -e 加入输出Log */1 * * * * /qiwen_list/upload_to_hdfs.sh > /qiwen_list/mapred.log 2>& ...

  10. SoapUI Pro Project Solution Collection-DataSource(jdbc,excel)

    here give a solution for excel file change the excel configuration these: Set Excel file path in cur ...