Microsoft 2013 新技术学习笔记 四
在继续学习Model的实践经验之前,先思考一下Controller和View的实践原则在本次系统重构中的应用,我手上是一个后台管理系统(不是门户系统、不是具体业务系统),通俗点讲就是给企业的运维人员用的一套系统。
后台运维系统最核心的就是导航菜单,一切工作从导航菜单开始,从UI结构上来讲就是典型的左右结构(左边导航右边操作区域),主流的Web UI框架都有这种结构的Layout。再深入一层的核心是资源(这个不具备通用性,只是我手上现有系统的设计理念而已):导航菜单是资源,企业组织结构是资源,用户是资源,权限是对资源的权限.....
粗略分析一下资源的获取流程及业务规则:
- 获取客户端参数,具体规则:参数可能是指定某类型的资源,也可能是指定某个具体的资源
- 根据参数找到所需要的资源,具体规则:根据参数从Model中获取数据,当然数据经过了权限过滤
- 返回给客户端
针对这种情况,相关的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 新技术学习笔记 四的更多相关文章
- Microsoft 2013 新技术学习笔记 一
有几年没有关注技术了,最近有点时间想把技术重新捡起来,借着重构手上的一个后台管理框架的机会将微软新的几种技术全部应用一下,从目的上来讲并没有希望能对涉及的技术有很深入的了解,所以这个系列的文章(篇幅不 ...
- Microsoft 2013 新技术学习笔记 三
什么是代码结构的组织?asp.net MVC 5 默认创建出的几个目录的标准含义分别如下: Controllers目录存放MVC模式中的Controler Models目录存放MVC模式中的Model ...
- Microsoft 2013 新技术学习笔记 二
在探讨系统重构的代码结构组织之前,先初步考虑框架与数据库的交互,在.net平台上数据访问方案有人总结为三类:DataSet.ADO.net 2.0.ORM组件.我只熟悉ADO.NET方式,众多的企业特 ...
- C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻
前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...
- IOS学习笔记(四)之UITextField和UITextView控件学习
IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...
- java之jvm学习笔记四(安全管理器)
java之jvm学习笔记四(安全管理器) 前面已经简述了java的安全模型的两个组成部分(类装载器,class文件校验器),接下来学习的是java安全模型的另外一个重要组成部分安全管理器. 安全管理器 ...
- Learning ROS for Robotics Programming Second Edition学习笔记(四) indigo devices
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
- Typescript 学习笔记四:回忆ES5 中的类
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- ES6学习笔记<四> default、rest、Multi-line Strings
default 参数默认值 在实际开发 有时需要给一些参数默认值. 在ES6之前一般都这么处理参数默认值 function add(val_1,val_2){ val_1 = val_1 || 10; ...
随机推荐
- VR介绍
VR(Virtual Reality,即虚拟现实,简称VR),是由美国VPL公司创建人拉尼尔在20世纪80年代初提出的.其具体内涵是:综合利用计算机图形系统和各种现实及控制等接口设备,在计算机上生成的 ...
- Bluetooth Low Energy——蓝牙低功耗
Android4.3(API级别18)引入内置平台支持BLE的central角色,同时提供API和app应用程序用来发现设备,查询服务,和读/写characteristics.与传统蓝牙(Classi ...
- ajaxSubmit与ajaxFileUpload的空值
ajaxSubmit发现正文无内容, ajaxFileUpload发现无上传内容, 嗯,你只是忘记了 html 中控件的 name 没有指定,这哥们不认 id 的.
- C++ 标准IO库
<C++ Primer 4th>读书笔记 C++ 的输入/输出(input/output)由标准库提供.标准库定义了一族类型,支持对文件和控制窗口等设备的读写(IO).还定义了其他一些类型 ...
- .NET读取Office文件内容(word、excel、ppt)
引用命名空间 using Microsoft.Office.Core; using Word = Microsoft.Office.Interop.Word; using Excel = Micros ...
- 【Android】混淆器(ProGuard)
混淆器(ProGuard) 混淆器通过删除从未用过的代码和使用晦涩名字重命名类.字段和方法,对代码进行压缩,优化和混淆.结果是一个比较小的.apk文件,该文件比较难进行逆向工程.因此,当你的应用程序对 ...
- [转]office2010一直卡在“正在受保护的视图中打开”
用Office 2010 打开文件遇到“”,如下图: 转自: 解决办法: 还可以使用下面的方法打开上图的受保护视图设置界面: 1. 启动 Word 2010 应用程序,单击[文件]按钮并选择[选项 ...
- 2016年 最火的 15 款 HTML5 游戏引擎
HTML5游戏从2014年Egret引擎开发的神经猫引爆朋友圈之后,就开始一发不可收拾,今年<传奇世界>更是突破流水2000万!从两年多的发展来看,游戏开发变得越来越复杂,需要制作各种炫丽 ...
- 【干货】个人工作文档节选:XAML MVVM 框架易用性细节优化Tips
1 易用性细节优化 1.1 代码片段 在ViewModel内,会有大量重复性的在Property set中激发 INotifyPropertyChanged.PropertyChanged 事件 ...
- Python中使用自定义类class作为海量数据结构时内存占用巨大的问题
最近碰到处理一个二十多兆的文件时内存蹭蹭的吃掉四百多兆,吓死宝宝了. 无奈毕竟接触python时间有限,还没有完整的看过python的一些基础知识,我想一个合格的pythoner应该不会碰到这个问题. ...