• 二十七、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是经过了这么一番磨练的,复杂业务功能实现有完全分离的方式,简单业务功能实现有半分离方式;

  • 相关阅读:
    算法题(2):两个数组的交集
    git 的一些小 tips
    linux 命令 -- chmod
    linux 命令 -- alias 和 grep
    docker 学习笔记(2)
    docker 学习笔记(1)
    redis 学习笔记(2)
    redis 学习笔记(1)
    对对象的list集合以excel表格导出
    字符串处理
  • 原文地址:https://www.cnblogs.com/kakake/p/4016289.html
Copyright © 2020-2023  润新知