二十七、EFW框架BS系统开发中的MVC模式探讨
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是经过了这么一番磨练的,复杂业务功能实现有完全分离的方式,简单业务功能实现有半分离方式;
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。