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

涉及的工具及技术: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. 仿花田:内部相亲网站 意中人(Asp.net MVC,Bootstrap2)

    起因: 那是七月份了,看见单身的同事在上花田网,当时觉得风格比较清新,还没有世纪佳缘等那些网站那么商业化,加上又看到了bootrstrap,于是就想做个demo出来玩玩.中间自己又在做其他的事情,和w ...

  2. 在Android中进行单元测试遇到的问题

    问题1.Cannot connect to VM  socket closed 在使用JUnit进行测试的时候,遇到这个问题.网上的解释是:使用Eclipse对Java代码进行调试,无论是远程JVM还 ...

  3. [OpenCV] 3、直线提取 houghlines

    >_<" 发现一个好的链接,是一个讲openCV的网站:http://www.opencv.org.cn/opencvdoc/2.3.2/html/index.html > ...

  4. jenkins2 hello pipeline

    文章来自:http://www.ciandcd.com 文中的代码来自可以从github下载: https://github.com/ciandcd   根据前面的2篇文章,我们已经安装和配置好了je ...

  5. 由Java中toString()方法引发的无意识的递归想到的

    先看一段很简单的java代码: toString()/** * @author jeffwong */ public class InfiniteRecursion { public String t ...

  6. ListView、PullToRefreshListView滑动加载可见item

    最近用的了PullToRefreshListView框架,也在listView中加载图片,对于滑动加载可见item,网上找了一些相关文档,但都不太合适,如:http://blog.csdn.net/z ...

  7. 使用Nginx负载均衡搭建高性能.NETweb应用程序一

    一.遇到的问题 当我们用IIS服务器部署了一个web应用以后,当很多用户高并发访问的时候,客户端响应就会很慢,客户的体验就会很差,由于IIS接受到客户端请求的 时候,就会创建一个线程,当线程达到几千个 ...

  8. 电子病历,到底是用BS还是CS

    电子病历,到底是用BS还是CS 袁永福 2014-8-19 前言:前几天下午去开发医疗软件的S公司,旁听了他们的内部技术讨论会议.他们目前的电子病历是B/S架构,会上一群人讨论起用C/S重构电子病历系 ...

  9. 将数据导出到Excel2007格式。

    增加数据格式 public static void TableToExcel2(DataTable table, string filename, string sheetname) { XSSFWo ...

  10. js for in对象key排序

    最近遇到一个比较奇葩的事情,for in 循环的时候,如果对象key 默认可以转化为整数,会把key转化为整数排序. code: 运行结果 大家看到data2的key默认顺序是"2" ...