zoukankan      html  css  js  c++  java
  • MVC

    MVC的理论思想对应的是主动MVC, 这里的主动的意思是, Model会主动通知View更新。而我们使用MVC框架, Struts, asp.net mvc等都不是主动MVC(视图的更新都是通过Controller完成的)

    Model

    用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。
    模型中数据的变化一般会通过一种刷新机制被公布。为了实现这种机制,那些用于监视此模型的视图必须事先在此模型上注册,从而,视图可以了解在数据模型上发生的改变。

    View

    视图层负责数据的展示。
    在视图中一般没有程序上的逻辑。为了实现视图上的刷新功能,视图需要访问它监视的数据模型(Model),因此应该事先在被它监视的数据那里订阅Model的事件。

    Controller

    控制器是M和V之间的连接器,用于控制应用程序的流程。它处理事件并作出响应。“事件”包括用户的行为和数据模型上的改变。

    image

    3.2 被动MVC

    下图是被动MVC中的流程,和主动MVC不同之处是, View没有订阅Model数据变化的事件,等待Model来通知需要根据新的数据来更新View. 在被动MVC中,Controller负责通知View, 有数据变化,需要更新视图。

    image

    被动MVC 中,与主动MVC的区别在于: 
    1、模型对视图和控制器一无所知,它仅仅是被它们使用 
    2、控制器使用视图,并通知它更新数据显示 
    3、视图仅仅是在控制器通知它去模型取数据的时候它才这么做(视图并不会订阅或监视模型的更新) 

    3.3. Web应用中的MVC框架

    Web中的MVC框架都是被动MVC模式,因为web应用中, 由于http是基于请求和响应方式协同工作的,因此当服务器端的model(数据)发生变化时,它不会立即更新客户端的view,只有客户端重新请求或刷新页面时才更新.

    下图是典型的MVC框架中的MVC一个请求流程。

    image

    3.4 MVC总结

    MVC优点

    • 由于MVC很好的分离了视图层和业务层,所以它具有以下优点
    • 耦合性低
    • 开发速度快
    • 可维护性高
    • 没有控件的概念,对html没有封装,易于理解
    • 和其它平台(java, php)等更加相似。便于人才获取

    MVC使用的误区

    1.把Model理解成实体类(Entity),在MVC中Model应该包含2部分功能,一部分是处理业务逻辑,一部分是提供View显示的数据
    2.把业务逻辑全部放在Controller端

    这两个误区本质上都是对Model的作用不明导致的。

    Model在MVC架构中起的作用非常重要,它应该是业务逻辑真正的实现层。所以Model的实际上是Business Model(业务模型)。而Controller仅仅起一个“桥梁”作用,它负责把View的请求转发给Model,再负责把Model处理结束的消息通知View。Controller是用来解耦View和Model的,具体一点说,就是为了让UI与逻辑分离(界面与代码分离)。

    引自http://www.techopedia.com/definition/27454/model-mvc-aspnet

    Techopedia explains Model (MVC)

    The Model is the part of MVC which implements the domain logic. In simple terms, this logic is used to handle the data passed between the database and the user interface (UI).

    The Model is known as domain object or domain entity. 
    The domain objects are stored under the Models folder in ASP.NET. The domain model represents the application perspective for the data to be handled whereas a view model is required to produce the engine that generates the View.

    This definition was written in the context of ASP.NET.

    MVC的缺点

    完美的MVC应用场景应该是这样的:

    有个Student Model, 关联StudentListView,  StudentEditView.
    对于StudentListView, Student Model提供Student的集合数据来显示StudentListView
    对于StudentEditView, Student Model提供单个Student数据来展示StudentEditView并且响应StudentEditView的保存操作。

    但是这只是完美的情况,实际应用中,在ListView上,不单单显示Student的信息,可能还需要这个Student的历史成绩,家庭情况,  老师信息。而这些是Student Model不能提供的。
    也许我们可以扩展Student Model, 将Student Model能够提供的信息扩展,包含成绩信息等,这本身也可以。但是,如果Student显示的View,这个需要只是需要额外的成绩信息,另一个View只是需要额外的家庭信息,Student Model是不是有些疲于奔命,你能知道还会有多少个差异化的View的需求? 而且让逻辑端代码这样不断的修改来适应View端,好吗?

    由于MVC的设计思想是从Model出发,而没有考虑到View端的复杂性,这样导致的问题是Model难以符合复杂多变的View端变化。
    相对这点,MVP和MVVM就要好得多。它们都独立出了Presenter 和ViewModel来对应每个View。

  • 相关阅读:
    4. Android框架和工具之 android-async-http
    3. Android框架和工具之 xUtils(BitmapUtils)
    自定义多列排序:C++/Java实现
    Java套接字
    Java泛型
    线程同步之生产者消费者
    面向对象之深复制与浅复制
    谈谈多线程
    递归与尾递归
    单例模式:Instance
  • 原文地址:https://www.cnblogs.com/BrokenIce/p/5679016.html
Copyright © 2011-2022 走看看