MVC浅谈(转载)

来源:互联网 发布:acfunfix.js 编辑:程序博客网 时间:2024/04/26 22:36
    只要接触MVC就势必离不开说三层,很多人就会一直纠结于他们之间的区别,也难怪,他们之间有共同之处:都分为三块,不仔细琢磨好像说的都是一样的东西,网上说法也是百家争鸣。本文仅是介绍一下对MVC的理解,由于学习是一个逐步深入的过程,现在还未到深刻理解的程度,也没必要非得区分出一个所以然来,也不敢对三层和MVC妄下评论,仅是记录这个学习认知的过程,希望和大家一同交流,随着时间的推移,自己的认识也在不断的刷新。

                                                      ========切入正题========


        MVC模式(Model-View-Controller)由Trygve Reenskaug在1974年提出,是施乐帕罗奥多研究中心(Xerox PARC)在20世纪80年代为程序语言Smalltalk发明的一种软件设计模式。MVC模式的目的是实现一种动态的程式设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化,使程序结构更加直观。
        MVC的设计思想是即一个应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离,这样一个应用被分成三个层——模型层、视图层、控制层。

       

       各个层的功能:

模型(Model):主要负责出来业务逻辑以及数据库的交互。用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。“模型”有对数据直接访问的权力,例如对数据库的访问。
视图(View):主要用于显示数据和提交数据。视图层能够实现数据有目的的显示。在视图中一般没有程序上的逻辑。
控制器(Controller):主要是用作捕获请求并控制请求转发。起到不同层面间的组织作用,用于控制应用程序的流程。它处理事件并作出响应。“事件”包括用户的行为和数据模型上的改变。

      三者之间的关系:

    


        Event(事件)导致Controller改变Model或View,或者同时改变两者。只要Controller改变了Models的数据或者属性,所有依赖的View都会自动更新。类似的,只要Controller改变了View,View会从潜在的Model中获取数据来刷新自己。

        MVC的两个分离:
      Ⅰ:View和Model分离:Model关注内在的不可视的逻辑,而View关注外在的可视的逻辑。这样能够为相同的Moudle开发不同的View进行展示,把可视与不可视分离开也可以使Modle相对独立,耦合性降低,可以进行独立测试。
      Ⅱ:View和Controller分离:这个分离的重要性不是很大,因为View和Controller往往是一一对应的关系。Controller对View是单向引用,这样可以对Controller进行独立测试。

        MVC的发展:
        我们平时最常说的是最早提出的MVC模式,也称为Classic MVC,具体演化参考(MVC演化历史),不再赘述。

        

        MVC的优点:

        最重要的是有多个视图对应一个模型的能力,使的软件的健壮性和代码的重用性得到了很大的提高;一个应用被分离为三个层,有新的需求只需改变特定的层就可以满足,也便于维护,有利于软件工程化管理。

        缺点:
      (1)增加了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,使软件的开发周期加长,并可能产生过多的更新操作,降低运行效率。
     (2)视图与控制器间的过于紧密的连接。视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。
     (3)视图对模型数据的低效率访问。依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。
     (4) 目前,一般高级的界面工具或构造器不支持MVC架构。改造这些工具以适应MVC需要和建立分离的部件的代价是很高的,从而造成使用MVC的困难
原创粉丝点击