二十七、EFW框架BS系统开发中的MVC模式探讨

回《【开源】EFW框架系列文章索引》       

EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0

EFW框架实例源代码下载:http://pan.baidu.com/s/1eQCc69G

上一章《EFW框架破茧成蝶》通过讲叙自己的一些编程经验,有对系统架构的认识,也有EFW框架中MVC模式的由来。整个过程分为五个阶段:

asp网站:做asp网站的时候根本没有什么系统的概念,就是几段代码复制粘贴拼装成外表不一样,功能就是那么几个的企业网站,哪会想到代码的重用、维护与扩展;

桌面系统:换了家公司开始接触CS结构的系统,知道了业务需求的重要性,经常一个功能随着业务的变化经常反复修改,这时候开始有了对代码的思考;

三层架构:有了对原有代码的认识,开始打破原有模式,对系统架构的认识一次质的突破,在项目中充分实践了分层模式;

Web系统(ExtJs+Aspx):随着技术的发展开始转向Web系统,这是对Web系统认识的一次过渡;

EFW框架(JqueryEasyUI+HTTPHandler+Controller+ObjectModel+Dao+Entity):只有经历过一些教训,且在成长过程中不断思考、总结,才能成就一个实用方便的框架;

本文要点:

1.MVC介绍

2.对比EFW MVC与Asp.Net MVC的优缺点

3.为什么要使用 MVC

4.AJAX的七宗罪

1.MVC介绍

MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式:

  Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。

  View(视图)是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。

  Controller(控制器)是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据

  MVC分层有助于管理复杂的应用程序,因为您可以在一个时间内专门关注一个方面。例如,您可以在不依赖业务逻辑的情况下专注于视图设计。同时也让应用程序的测试更加容易。

  MVC 分层同时也简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑。

在EFW框架中:

Model:代表的就是ObjectModel、Dao和Entity

View:代表的就是JqueryEasyUI

Controller:代表的就是WebController

有很多程序员往往把框架模式和设计模式混淆,认为MVC是一种设计模式。实际上它们完全是不同的概念。框架、设计模式这两个概念总容易被混淆,其实它们之间还是有区别的。框架通常是代码重用,而设计模式是设计重用,架构则介于两者之间,部分代码重用,部分设计重用,有时分析也可重用。

2.对比EFW MVC与Asp.Net MVC的优缺点

EFW MVC的优点:

1.界面代码编写不能太灵活,aspx界面不能带<%%>直接从后台获取数据,aspx文件只有html标签,数据请求都放在JS文件中,达到代码完全分离

2.开发系统一定选定一个主要的界面框架,如JqueryEasyUI,这样界面代码与控制器相对应,直接交互基于Json数据,并且是基于JqueryEasyUI的数据结构的Json数据;这样就能大量简化我们的数据结构转换的工作量;

3.一定要利用Jquery中的Ajax向控制器请求数据,不要用其他那些乱七八糟的方式;

4.AspNetMVC有一个复杂的路由映射系统,可以非常灵活的自定义配置,而EFW中的MVC就没这么复杂,很简单只是在Url参数指定Controller和method就行了,就会将http请求调用指定控制器中的方法;

EFW MVC的缺点:

1.界面层的数据转换只能使用Javascript脚本来处理,不能使用动态脚本语言,这样加大了javascript脚本的工作量,对以后的维护还是存在一定挑战。

2.大量使用Ajax进行数据交互,不能被被搜索引擎识别,且Ajax也存在一些弊端,请看下面的“AJAX的七宗罪”

ASP.NET MVC的优点:

1.aspx代码可以写动态脚本语言,有点回归到asp那种编码方式

2.应用程序通过Controller来控制程序请求,并提供了原生的UrlRouting功能来重写Url。

ASP.NET MVC的缺点:

1.别扭的视图:能不能不要让我承担逻辑

我个人认为,ASP.NETMVC第一个不太妥当的地方就是视图的实现。在这个框架中,视图是使用ASPX文件实现的。就呈现数据这一需求来说,ASP.NETMVC下一般性的做法是:控制器负责调用Model完成数据的读取,并将需要呈现的数据通过ViewData传递给视图,并选择某视图呈现。被选中的视图要负责将ViewData中相应的数据读取、分解,然后使用一定的逻辑语句将其呈现。

这个方式,就要求视图中存在一定的逻辑语句,如将ViewData中数据转换成相应类型的类型转换语句;如果需要按照某一条件呈现不同内容,则需要分支语句;而常用的表格式数据呈现需要用到循环语句。于是,我们就会看到视图中充斥着各种<%%>、if、foreach等等的东西。

2.对Ajax的支持:仍然很不方便

我们知道,现在在一个Web应用中加入Ajax元素是司空见惯的,微软当然知道这一点,所以在ASP.NET MVC中,天然支持ASP.NET AJAX和jQuery,并提供了一个AjaxHelper来完成一些辅助性操作。然而,这个AjaxHelper的功能真是远远不够。

由于ASP.NETMVC的特性,导致某一个Action的Url不是固定的。所以在请求Action时,一般不是将Url硬编码在页面中,而是通过Html.ActionLink动态生成。这就出现了一个问题,Ajax请求怎么办?当然,对于点击链接或提交表单触发的Action,AjaxHelper有专门的辅助方法,但是,如果某个Ajax请求不是通过链接或表单触发的,就会很有问题。毕竟你不能把Url硬编码在js里。

总之来说,AspNet Mvc对比EFW MVC应该更灵活,适用的场景更多,而EFW框架虽然限制了一些功能,但是让我们的学习成本与犯错误的机会更少,所以说EFW MVC更适合与行业软件的开发,不太适合互联网网站的开发;

3.为什么要使用 MVC

大部分Web应用程序都是用像ASP,PHP,或者CFML这样的过程化语言来创建的。它们将像数据库查询语句这样的数据层代码和像HTML这样的表示层代码混在一起。经验比较丰富的开发者会将数据从表示层分离开来,但这通常不是很容易做到的,它需要精心的计划和不断的尝试。MVC从根本上强制性的将它们分开。尽管构造MVC应用程序需要一些额外的工作,但是它给我们带来的好处是无庸质疑的。

因为模型是自包含的,并且与控制器和视图相分离,所以很容易改变你的应用程序的数据层和业务规则。如果你想把你的数据库从MySQL移植到Oracle,或者改变你的基于RDBMS数据源到LDAP,只需改变你的模型即可。一旦你正确的实现了模型,不管你的数据来自数据库或是LDAP服务器,视图将会正确的显示它们。由于运用MVC的应用程序的三个部件是相互对立,改变其中一个不会影响其它两个,所以依据这种设计思想你能构造良好的松偶合的构件。

4.AJAX的七宗罪

AJAX的七宗罪》http://tech.163.com/05/1009/18/1VL1PAP300091589.html

罪之一:对搜索引擎的支持不好

罪之二:编写复杂、容易出错

罪之三:冗余代码更多了

罪之四:破坏了Web的原有标准

罪之五:缺少一个没有标准之争、没有back和history的浏览器

罪之六:XML只是用来打幌子

罪之七:世界这么大却找不到自己的家

另外:讲了这么多,我们使用MVC的目的就是从根本上把界面和逻辑进行分离,但是我们也不要过度的剥离所有的关联,因为这些剥离必然会让你的代码变得复杂,所以要有一个适当的平衡,而这个标准取决于业务功能复杂度。EFW框架中的MVC是经过了这么一番磨练的,复杂业务功能实现有完全分离的方式,简单业务功能实现有半分离方式;

时间: 10-08

二十七、EFW框架BS系统开发中的MVC模式探讨的相关文章

二十八、带给我们一种新的编码思路——EFW框架CS系统开发中的MVC模式探讨

回<[开源]EFW框架系列文章索引>        EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0 EFW框架实例源代码下载:http://pan.baidu.com/s/1eQCc69G       前言:记得最初写出Winform版MVC的代码是在公司的一个产品中,产品有几个界面功能比较多,一个界面窗体的代码尽然有1万多行代码,让我们在维护这几个界面的时候非常的痛苦,你可能想可以把这个大的界面拆分成几个小的界面在集成在一起不就好了,但实际上这样

稍微谈一下 javascript 开发中的 MVC 模式

随着前台开发日益受到重视,客户端代码比重日益增加的今天,如何在javascript开发里应用MVC模式,这个问题似乎会一直被提到,所以偶在这里粗略的谈一下自己的看法吧. MVC模式的基本理念,是通过把一个application封装成model, view和controller三个部分达到降低耦合,简化开发的目的.这么说很空洞,大家可以实际看个例子: 1<select id="selAnimal"> 2    <option value="cat"&

二十三、【开源】EFW框架Web前端开发之常用组件(FusionCharts图表、ReportAll报表等)

回<[开源]EFW框架系列文章索引>        EFW框架源代码下载V1.2:http://pan.baidu.com/s/1hcnuA EFW框架实例源代码下载:http://pan.baidu.com/s/1o6MAKCa 前言:上一章讲了EFW框架中的界面框架JqueryEasyUI,在一个Web系统开发中除了需要一个好的界面框架还有需要一些功能,比如:图表展示.Web报表预览打印.文件上传.文本编辑等功能在Web系统开发过程中也是经常用到的:为了方便大家使用EFW框架开发系统,本人

二维码点餐系统开发app

二维码点餐系统开发(陈琦:138-2848-7919可微)二维码点餐模式开发,二维码点餐系统平台,二维码点餐平台APP,二维码点餐定制开发,二维码点餐软件APP,二维码点餐定制模式,二维码点餐商城平台. 微信自助点餐系统将精致的菜单推送给客户.通过微信自助点餐系统让客户方便的自助点菜,完成支付后,厨房无线打印机立即收到订单并打印出菜单,且告知是哪个桌台的客户的订单.另外还有短信.邮件提醒店主以防漏单. 一.如何用微信自助点餐系统来点菜 1.扫下餐桌的二维码 2.微信自助点餐系统自动采集用户所在的

多人语音直播系统开发中聊天室功能实现方案?

"直播+"不仅是视频.直播平台的尝试方向,也成为众多音乐平台的创新业务,而语音直播正是其中一种尝试.语音直播的用户更偏向年轻化,多为追求新鲜感的90后群体,他们有自己的行为处事方式,喜欢把孤独和无聊的时间用声音的方式宣泄.对于喜爱声音的这类群体来说,语音直播系统开发既保护了他们的隐私又让他们倍感亲切.那么从技术层面讲,多人语音直播系统开发中聊天室的功能实现需要特别注意哪些呢?一.语音直播系统开发的优势是什么?想必有人会问语音直播和传统的电台有什么不同呢?语音直播也有着自己的优势主要有以

家电二维码售后服务平台系统开发

家电二维码售后服务平台系统开发,家电二维码售后系统开发,小吴183.2071.6434微电,家电二维码售后软件开发,家电二维码售后平台开发. 互联网平台的节点有两大类型:第一基数节点,也就是弱连接的节点,其规模要大,越大越好,互联网的价值与节点数的平比成正比.第二活跃节点,也就是强连接的节点,其能量要强,越强越好,互联网的价值与其强度成正比. 一.家电维修行业"维修黑幕"层出不穷 记者从一位从事家电维修人士那里了解到,目前行业公认当前家电维修行业有陷阱,"维修黑幕"

Python在实时嵌入式系统开发中扮演的五个主要角色-悦德财富

Python已经成为相当热门的程序语言.它以著名的Monty Python喜剧组命名,属于面向对象和解释型语言(非编译型).该属性使得Python具有良好的跨平台性,比如Linux和Windows,或是诸如Raspberry Pi等单板计算机.随着Python的日益普及,人们可能会问,在实时嵌入式系统中是否也有Python的一席之地. 答案是肯定的.下面是开发人员发现Python在实时嵌入式系统开发中有可能扮演的五个主要角色. 作用# 1设备调试和控制 在嵌入式软件开发过程中,开发人员常常需要分

Android开发中的MVC设计模式

Android开发中的MVC设计模式的理解 1. Android系统中分层的理解: (1).在Android的软件开发工作中,应用程序的开发人员主要是应用Android Application Framework层封装好的Api进行快速开发. (2).在Android框架的四个层次中,下层为上层服务,上层需要下层的支持,上层需要调用下层的服务. (3).这种分层的方式带来极大的稳定性.灵活性和可扩展性,使得不同层的开发人员可以按照规范专心特定层的开发. (4). Android的官方建议应用程序

生活中的MVC模式,一个吃货的理解。

以下是生活中对于MVC模式的领悟,虽然可笑,轻喷. 2015年 8月 26日 M  => Model       模型 我认为叫做模具更好的理解.批量加工生产具有相同特征的东西.        V   => View         显示. C   => Control    控制模型用的.就好比模具师傅吧,统筹调控所有的模具,最后把模具里所生产的产品组合起来,显示到View里面就成了我们的一个产品. 有趣的是,前几天去世界著名美食品牌连锁店——兰州拉面吃饭的时候.看到牛肉拉面.羊肉拉面