有几年没有关注技术了,最近有点时间想把技术重新捡起来,借着重构手上的一个后台管理框架的机会将微软新的几种技术全部应用一下,从目的上来讲并没有希望能对涉及的技术有很深入的了解,所以这个系列的文章(篇幅不会太长)更多的是思考这些新技术在什么场景中使用的问题。

涉及的工具及技术: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 新技术学习笔记 一的更多相关文章

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

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

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

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

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

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

  4. [转载]SharePoint 2013搜索学习笔记之搜索构架简单概述

    Sharepoint搜索引擎主要由6种组件构成,他们分别是爬网组件,内容处理组件,分析处理组件,索引组件,查询处理组件,搜索管理组件.可以将这6种组件分别部署到Sharepoint场内的多个服务器上, ...

  5. Microsoft Power BI 学习笔记

    ​   Power Bi 学习笔记 一   Power BI 是微软发布的一系列的软件服务.应用和连接器,这些软件服务.应用和连接器协同工作,将不相关的数据源转化为合乎逻辑.视觉上逼真的交互式见解. ...

  6. [转载]SharePoint 2013搜索学习笔记之自定义结果源

    搜索中心新建好之后在搜索结果页上会默认有所有内容,人员,对话,视频这四个结果分类,每个分类会返回指定范围的搜索结果,这里我再添加了部门日志结果分类,搜索这个分类只会返回部门日志内容类型的搜索结果,要实 ...

  7. 【Todo】Java新技术学习笔记-from某技术分析

    看到这篇文章:http://mt.sohu.com/20160806/n462923089.shtml <十余年技术大牛告诉你,这些Java新技术不可错过> 虽然讲的比较泛,但是里面提到的 ...

  8. Dynamic CRM 2013学习笔记(一)插件输入实体参数解析

      1. 问题描述 最近新建了一个post事件的插件,传入的参数处理如下: 1: if (context.InputParameters.Contains("Target") &a ...

  9. Dynamic CRM 2013学习笔记(二)插件基本用法及调试

      插件是可与 Microsoft Dynamics CRM 2013 和 Microsoft Dynamics CRM Online 集成的自定义业务逻辑(代码),用于修改或增加平台的标准行为.也可 ...

随机推荐

  1. 深入理解java虚拟机【Java虚拟机类生命周期】

    C/C++等纯编译语言从源码到最终执行一般要经历:编译.连接和运行三个阶段,连接是在编译期间完成,而java在编译期间仅仅是将源码编译为Java虚拟机可以识别的字节码Class类文件,Java虚拟机对 ...

  2. thinkphp支持大小写url地址访问,不产生下划线

    from:http://www.111cn.net/phper/thinkPhp/57748.htm 一.在配置文件中开启了thinkphp的大小写识别功能,使链接大小写都可以正常访问: ‘URL_C ...

  3. jQuery的XX如何实现?——3.data与cache机制

    往期回顾: jQuery的XX如何实现?——1.框架 jQuery的XX如何实现?——2.show与链式调用 -------------------------- 源码链接:内附实例代码 jQuery ...

  4. 简单理解ECMAScript2015中的Promise

    ECMAScript6中新增了Promise对象, 所谓Promise对象,即代表着一个还未完成,但将来某时会完成的操作(通常是异步操作).使用Promise对象,我们就可以避免陷入函数层层嵌套的‘回 ...

  5. Android兼容包multidex的开发和构建方法

    在Android开发中,函数方法超过65k限制后,我们就常常会用到multidex分包解决,但是multidex的配置,对系统apk的构建.签名.打包复杂性大大的增加,严重的降低了构建效率.那这个问题 ...

  6. vs2012 MSDN帮助文档离线包下载安装方法

    vs2012安装文件 自带的 MSDN帮助文档不全, 需要自己手动添加需要的离线文档包, 具体方法如下 1. 打开 vs2012 2. 按 ctrl + alt + F1 打开帮助文档管理器 3. 在 ...

  7. 2013年的一些常用PHP資源整理下載

    這些資源基本上都是一些免積分或只需要1個積分就能下載的資源,經過整理篩選最後分享給大家,希望大家喜歡: PHP手册(chm) http://download.csdn.net/detail/u0118 ...

  8. 深入学习golang(5)—接口

    接口 概述 如果说goroutine和channel是Go并发的两大基石,那么接口是Go语言编程中数据类型的关键.在Go语言的实际编程中,几乎所有的数据结构都围绕接口展开,接口是Go语言中所有数据结构 ...

  9. FoxMail的Bug

    Foxmail 7.2 build6.040,win7中文专业版 下载腾讯的企业邮箱的邮件, 自动配置为imap收邮件 收件箱应该为1740封 邮件 实际foxmail却只收到1500多封 改成pop ...

  10. Drupal7_2:安装drupal

    Drupal7_2:安装drupal 分类: Drupal72012-10-30 01:06 1074人阅读 评论(0) 收藏 举报 假设你已经搭建好了所需的必备环境,接下来就参照以下几步,快速安装一 ...