回《【开源】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是经过了这么一番磨练的,复杂业务功能实现有完全分离的方式,简单业务功能实现有半分离方式;

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

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

    回<[开源]EFW框架系列文章索引>        EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0 EFW框架实例源代码下载:http://p ...

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

    随着前台开发日益受到重视,客户端代码比重日益增加的今天,如何在javascript开发里应用MVC模式,这个问题似乎会一直被提到,所以偶在这里粗略的谈一下自己的看法吧. MVC模式的基本理念,是通过把 ...

  3. Web前端开发中的MCRV模式(转)

    作者: izujian  来源: baiduux 摘要:针对前端开发中基于ajax的复杂页面开发所面临的代码规模大,难以组织和维护,代码复用性.扩展性和适应性差等问题,本文尝试以MVC思想为 基础,结 ...

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

    回<[开源]EFW框架系列文章索引>        EFW框架源代码下载V1.2:http://pan.baidu.com/s/1hcnuA EFW框架实例源代码下载:http://pan ...

  5. C、C++、boost、Qt在嵌入式系统开发中的使用

    概述 嵌入式系统开发相对来说属于偏底层的开发,也就是与硬件结合比较紧密,只能使用C/C++语言.对于做平台开发的人来说,C语言真的是很"古老"的语言,属于操作系统语言!好多人会觉得 ...

  6. 系统开发中按下Enter键登录系统

    转载来自:http://www.jb51.net/article/54308.htm 系统开发中按下Enter键登录系统,即就是监听键盘,当按下Enter键后调用登录按钮的click()事件. JS方 ...

  7. MVVM框架在unity开发中的使用

    1.什么是MVVM 借用一下百度百科上对MVVM的介绍,MVVM是Model-View-ViewModel的简写,它本质上就是MVC 的改进版.MVVM 就是将其中的View 的状态和行为抽象化,让我 ...

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

    以下是生活中对于MVC模式的领悟,虽然可笑,轻喷. 2015年 8月 26日 M  => Model       模型 我认为叫做模具更好的理解.批量加工生产具有相同特征的东西.        ...

  9. php中的MVC模式运用

    [size=5][color=Red]php中的MVC模式运用[/color][/size] 首先我来举个例子: 一个简单的文章显示系统 简单期间,我们假定这个文章系统是只读的,也就是说这个例子将不涉 ...

随机推荐

  1. [BTS] Deploy Command

    BizTalkDeploymentTools.AddResource.bat @Echo OFF SET ApplicationName=%~1 SET ComponentType=%~2 SET C ...

  2. 深入理解requestAnimationFrame

    前言 本文主要参考w3c资料,从底层实现原理的角度介绍了requestAnimationFrame.cancelAnimationFrame,给出了相关的示例代码以及我对实现原理的理解和讨论. 先来看 ...

  3. 改写libsvmread读取多标记数据集

    在libsvm和liblinear软件包里有一个C函数叫libsvmread,这个函数的作用是把如下格式的文本文件\begin{align*} 1 & \ \ *:* \ \ *:* \\ - ...

  4. javascript 中关于对象转换数字值的一些特点

    下面是摘至<Javascript 高级程序设计第三版>里的一段话 是关于对象转换数字值的一些规则 "在应用于对象时,先调用对象的valueOf()方法以取得一个可供操作的值.然后 ...

  5. atitit.跨平台gui 概览

    atitit.跨平台gui 概览 为什么需要跨平台gui 国际上那些跨平台的GUI程序,除了像Firefox之类的大型项目会重写界面外,中小型的项目基本上都是用GTK+或WxWidgets为多.毕竟要 ...

  6. JDK版本不兼容问题之:一台机器安装多个版本的JDK

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://guojie.blog.51cto.com/59049/45964 我的机器上最开 ...

  7. FindFriendsServer服务搭建

    本文介绍如何搭建FindFriendsServer(https://github.com/hnrainll/FindFriendsServer)所需的环境. 环境需要: Windows+Apache+ ...

  8. android: 从相册中选择照片

    虽然调用摄像头拍照既方便又快捷,但并不是每一次我们都需要去当场拍一张照片的. 因为每个人的手机相册里应该都会存有许许多多张照片,直接从相册里选取一张现有的照 片会比打开相机拍一张照片更加常用.一个优秀 ...

  9. aehyok.com的成长之路三——框架结构

    前言 首先奉上个人网站地址传送门:aehyok.com. aehyok.com的成长之路一——开篇 中主要阐述了自己为什么建立自己的网站,以及个人网站的大致方向. aehyok.com的成长之路二—— ...

  10. mysqld.exe 占了400M内存的问题

    最近遇到了服务器总是停机的问题,虽然它自己只有2G的内存,不过实际部署的应用访问量非常小,也不至于2G就不够用,所以开始了给服务器瘦身的计划. 看着任务管理器里面的各个进程,发现吃内存最厉害的是mys ...