Microsoft 2013 新技术学习笔记 一
有几年没有关注技术了,最近有点时间想把技术重新捡起来,借着重构手上的一个后台管理框架的机会将微软新的几种技术全部应用一下,从目的上来讲并没有希望能对涉及的技术有很深入的了解,所以这个系列的文章(篇幅不会太长)更多的是思考这些新技术在什么场景中使用的问题。
涉及的工具及技术:Visual Studio 2013 、 asp.net mvc 5 、 entity framework 6.0.1、 JQuery 2.0.3、 LigerUI 1.2.2
想重构手上的后台管理框架,是因为随着业务经验的积累,很多业务逻辑有了改进,随之对应的后台数据库结构有了很多改善,但那套框架是.net 2.0时代创建的,且不是由我一人创建的,前后经过好几个团队、好几个项目的修改,要想在数据库结构上应用这些改善要解决的问题太多了,而且技术本身更新、淘汰就比较快不是,既然有点时间,何不用新技术来重建,一是可以跟上时代步伐,二也可以使得积累的业务逻辑经验沉淀下来。
正因为本次重构的出发点是想进行数据结构的改善,手上现有这套框架经历的几个团队水平都不算低,在软件重用上花费的精力也不算少,但出于很多客观因素的关系,"最大程度的代码重用、以最小的代码变化来适应各种需求变更"这样的目的似乎难以达到(在一个甚至几个团队环境中,考虑团队成员更换频繁的情况下来达到这个目的,而不是以单个人在相当长的一段时间内达到这个目的),本次重构的目的之一是改善前端展示层如何快速适应数据层发生的变化,所以首先考虑MVC设计模式。早在十年前就已经接触过MVC概念了,但不是在微软体系内,作为微软技术路线的旅行者,一直没有将此概念应用到实际项目中,而今终于有机会了。
MVC作为一种设计模式,比其他设计模式更"难以捉摸",比如你去比较Java平台的众多MVC框架的实现做法与.net平台MVC框架的实现做法,不同框架对MVC的诠释不一样,作为一个初学者你搞不清楚到底哪种做法是正确的(或者说更正宗的),即便是在.net平台上,在微软官方能找到的资料中也是存在类似这样的"难以捉摸"的地方,举个例子:
上图应当是微软中国(也可能是其某个合作伙伴)对MVC设计模式的一些诠释,图中讲到"Model被Controller更新后,会直接通知View并更新显示",asp.net mvc 5的实际情况却是Model和View是没有通信的,都是Controller通过调用IView接口来通知View更新,且Controller并没有将Model直接传递给View,而是复制一份后将复制品传递给View。从这个角度来讲:asp.net mvc 5其实是MVP设计模式而不是MVC设计模式。你也许听说过另外一个概念"MVC2",根据相关概念解释:MVC2与MVC的区别就是Model和View是否通信,由此又可以判断所谓"MVC2"模式其实就是"MVP"模式。然后还有MOVE模式,该模式添加了一个Event来单独处理Model、Controller、View之间的通信。当然针对MVP和MVC也有另外一个应用说法:上图中的MVC模式适合于CS结构软件,而MVP模式适合于BS结构软件,这样倒也能解释通asp.net mvc 5中Model和View是没有通信的。
我还看到过一个分析cocoa框架中对MVC的诠释,核心概念如下图所示:Model和View是完全隔离。
另外,关于View的更新是通过Model发出还是通过Controller发出除了CS/BS结构的考虑外,减少代码冗余也是考虑因素之一(老实说这个因素我没理解到其含义,不过这篇文字最后一句话:所以,我觉得,不去彻底的MVC,不去彻底的脱耦,改为由controller先改变model,再由controller直接去改变view,要省不少代码和时间,当然换来的弊处就是controller必须要依附于view的存在了。。。 看看asp.net mvc的Controller如何定位到View的默认规则,可不就是依附于View了嘛)。
到底什么是MVC设计模式以及该如何应用此设计模式呢?我在WIKI百科上找到了MVC的定义,自我小结:在设计软件架构时,只要存在将软件系统分成模型(Model)、视图(View)和控制器(Controller)三个部分,即为应用了MVC设计模式(这通过选择一个MVC实现框架即可轻松达到),但这还不够,在设计、开发软件的整个过程中时刻注意MVC的两个应用目标:MVC模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化,使程序结构更加直观。(这第二个步骤可以说是我整理这份学习笔记的重点所在,就是我后面提及的"代码结构组织")
.net 平台上的MVC实现框架已经有很多可选择的了,对框架选择的因素有很多,比如对MVC实现的彻底程度、处理性能等等,我没有也不打算对目前主流的MVC框架进行这样的挑选,经验告诉我当你选择一个框架应用到实际项目时,你总是有机面对这个框架的一些不足或者说缺陷之处的,花点时间,不足和缺陷都能解决,所以我采用了官方的MVC框架。
作为asp.net mvc 5的初学者,官方教程是精练的。 网上大部分教程都是引用的这套教程,so 不用浪费时间去搜索。
在2011年下半年的时间,我投入了3个月的时间策划开一个小吃店,虽然最后由于发生一些变故没有做成,但总算对开一家餐饮店的整个策划过程有了比较深入的了解,回头想想一家餐厅的运作采用MVC模式是比较好管理的(是否利于产生盈利这个不说),一家餐厅要想有持续的客源,厨师是最重要的,做的菜品能符合客户的胃口才能让客户持续来店,这个厨师就是MVC的Model,顾客来店通过菜单点菜,这个菜单就是MVC的View,顾客点菜后由服务员下单,这个服务员就是MVC的Controller,服务员下单通知厨师做菜,厨师只负责做好菜,菜是给哪个顾客做的不管,由服务员(也就是Controller)来负责上菜。 这就是MVC模式的核心:Model负责数据的处理,Controller负责调度和控制,View负责展示数据给用户。
Microsoft 2013 新技术学习笔记 一的更多相关文章
- Microsoft 2013 新技术学习笔记 二
在探讨系统重构的代码结构组织之前,先初步考虑框架与数据库的交互,在.net平台上数据访问方案有人总结为三类:DataSet.ADO.net 2.0.ORM组件.我只熟悉ADO.NET方式,众多的企业特 ...
- Microsoft 2013 新技术学习笔记 四
在继续学习Model的实践经验之前,先思考一下Controller和View的实践原则在本次系统重构中的应用,我手上是一个后台管理系统(不是门户系统.不是具体业务系统),通俗点讲就是给企业的运维人员用 ...
- Microsoft 2013 新技术学习笔记 三
什么是代码结构的组织?asp.net MVC 5 默认创建出的几个目录的标准含义分别如下: Controllers目录存放MVC模式中的Controler Models目录存放MVC模式中的Model ...
- [转载]SharePoint 2013搜索学习笔记之搜索构架简单概述
Sharepoint搜索引擎主要由6种组件构成,他们分别是爬网组件,内容处理组件,分析处理组件,索引组件,查询处理组件,搜索管理组件.可以将这6种组件分别部署到Sharepoint场内的多个服务器上, ...
- Microsoft Power BI 学习笔记
Power Bi 学习笔记 一 Power BI 是微软发布的一系列的软件服务.应用和连接器,这些软件服务.应用和连接器协同工作,将不相关的数据源转化为合乎逻辑.视觉上逼真的交互式见解. ...
- [转载]SharePoint 2013搜索学习笔记之自定义结果源
搜索中心新建好之后在搜索结果页上会默认有所有内容,人员,对话,视频这四个结果分类,每个分类会返回指定范围的搜索结果,这里我再添加了部门日志结果分类,搜索这个分类只会返回部门日志内容类型的搜索结果,要实 ...
- 【Todo】Java新技术学习笔记-from某技术分析
看到这篇文章:http://mt.sohu.com/20160806/n462923089.shtml <十余年技术大牛告诉你,这些Java新技术不可错过> 虽然讲的比较泛,但是里面提到的 ...
- Dynamic CRM 2013学习笔记(一)插件输入实体参数解析
1. 问题描述 最近新建了一个post事件的插件,传入的参数处理如下: 1: if (context.InputParameters.Contains("Target") &a ...
- Dynamic CRM 2013学习笔记(二)插件基本用法及调试
插件是可与 Microsoft Dynamics CRM 2013 和 Microsoft Dynamics CRM Online 集成的自定义业务逻辑(代码),用于修改或增加平台的标准行为.也可 ...
随机推荐
- Hash与Map
Hash与Map 面试时经常被问到,什么是Hash?什么是Map? 答:hash采用hash表存储,map一般采用红黑树(RB Tree)实现.因此其memory数据结构是不一样的,而且他们的时间复杂 ...
- java web开发 图片上传功能
基本思路在于,配置路径,然后用java I/O的api将图片上传到该目录下. String photoPath = ServletActionContext.getServletContext( ...
- 生成月初月末便于拼接sql
for ($i=1; $i < 13; $i++) { $date = strtotime(date("2015-$i-01")); $firstday = date(&qu ...
- fir.im Weekly - 如果让你重新做一款APP
设想下:如果让你重新做一款 APP ,你会用到哪些开发.设计等资源和工具? 本期的 Weekly 为大家分享了最近不错的 APP 开发资源,大部分是关于 iOS 开发. Android 开发.UI设计 ...
- jQuery页面滚动监听事件及高级效果插件
jQuery页面滚动监听事件及高级效果插件 1. One Page scroll (只适用于上下焦点图)http://www.thepetedesign.com/demos/onepage_scrol ...
- css之选择器篇
css能够获取到HTML结构上的元素,这个是怎么实现的了? 在我们看来这是个很神奇的事情,css可以写在页面之外,也可以写在页面内,而都不会影响到它去 获取这个元素,还有无论这个HTML结构多么复杂, ...
- 05管理登录名&服务器固定角色-大话数据库
大纲:学习如何利用SSMS快速自学T-SQL,先看看都有那些服务器固定角色,并且都是干啥的,如何把windows系统用户增加为登录名,单独新建登录名,修改登录名,删除登录名,将角色&登录名进行 ...
- ASP.NET MVC中实现多个按钮提交的几种方法
有时候会遇到这种情况:在一个表单上需要多个按钮来完成不同的功能,比如一个简单的审批功能. 如果是用webform那不需要讨论,但asp.net mvc中一个表单只能提交到一个Action处理,相对比较 ...
- QQ邮箱的安全问题
下午同事群里有人提醒,小心欺诈邮件.邮件内容为你的帐户在XX存在异地登录,已经进入了[保护模式],如需解除请点击[解除保护模式] 除了链接之外,其它跟官方的是一模一样,包括标题. 那个链接的地址是:h ...
- SQL Server 2008 Datetime Cast 成 Date 类型可以使用索引(转载)
很久没写blog,不是懒,实在是最近我这的访问速度不好,用firefox经常上传不了图片 ....... 今天无意发现了SQL Server 2008 Datetime Cast 成 Date 类型可 ...