回《【开源】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. 15个专业版响应式WordPress主题

    当你准备创建一个新的网站,你会发现有很多的WordPress主题供你选择,它们强大而且合适.虽然大量的第三方插件可以解决脚本的问题,但这次我们要向你介绍一些完全不同于以往的主题,它们都是专业开发者开发 ...

  2. iOS开发--JSON

    1.什么是JSON? JSON(JavaScript Object Notation)在网络传输中几乎无处不在,JSON是一种轻量级的数据交换格式,是基于JavaScript(Standard ECM ...

  3. MyEclipse使用总结——MyEclipse文件查找技巧 ctrl+shift+R ctrl+H

    一.查找文件 使用快捷键[ctrl+shift+R]弹出弹出文件查找框,如下图所示: 二.查找包含某个字符串的文件 使用快捷键[ctrl+H]在弹出对话框中选File Search选项,然后在第一个文 ...

  4. node.js WebService异常处理(domain)以及利用domain实现request生命周期的全局变量

    成熟的Web Service技术,例如Fast CGI.J2EE.php,必然会对代码异常有足够的保护,好的Web必然会在出错后给出友好的提示,而不是莫名其妙的等待504超时.而node.js这里比较 ...

  5. CSS水平垂直居中总结

    行内元素水平居中 把行内元素包裹在块级父元素中,且父元素中的css设置text-align:center; <!DOCTYPE html> <html> <head> ...

  6. INSERT INTO .. ON DUPLICATE KEY更新多行记录

    现在问题来了,如果INSERT多行记录, ON DUPLICATE KEY UPDATE后面字段的值怎么指定?要知道一条INSERT语句中只能有一个ON DUPLICATE KEY UPDATE,到底 ...

  7. C#中使用委托、接口、匿名方法、泛型委托实现加减乘除算法

    使用C#实现加减乘除算法经常被用作新手练习.本篇来分别体验通过委托.接口.匿名方法.泛型委托来实现. 使用委托实现 加减乘除拥有相同的参数个数.类型和返回类型,首先想到了使用委托实现. //创建一个委 ...

  8. Maven Nexus Setup tutorial

    Technorati 标签: maven,nexus 1. download the Nexus from website for free version: 2. Run the Command p ...

  9. 《STL系列》之map原理及实现

    上一篇文章<STL系列>之vector原理及实现,介绍了vector的原理及实现,这篇文章介绍map的原理及实现.STL实现源码下载.STL中map的实现是基于RBTree的,我在实现的时 ...

  10. chrome https添加信任

    在浏览器地址栏输入:chrome://net-internals/#hsts 然后到Add domain下,Domain添上诸如google.com和google.com.hk ,并勾选Include ...