文档章节

MV*的描述

Y
 Yhon
发布于 2016/12/08 21:53
字数 1396
阅读 1
收藏 0

MVC的调用关系

用户的对View操作以后,View捕获到这个操作,会把处理的权利交移给Controller(Pass calls);Controller接着会执行相关的业务逻辑,这些业务逻辑可能需要对Model进行相应的操作;当Model变更了以后,会通过观察者模式(Observer Pattern)通知View;View通过观察者模式收到Model变更的消息以后,会向Model请求最新的数据,然后重新更新界面。

优点:

  1. 把业务逻辑全部分离到Controller中,模块化程度高。当业务逻辑变更的时候,不需要变更View和Model,只需要Controller换成另外一个Controller就行了(Swappable Controller)。
  2. 观察者模式可以做到多视图同时更新。

缺点:

  1. Controller测试困难。因为视图同步操作是由View自己执行,而View只能在有UI的环境下运行。在没有UI环境下对Controller进行单元测试的时候,Controller业务逻辑的正确性是无法验证的:Controller更新Model的时候,无法对View的更新操作进行断言。
  2. View无法组件化。View是强依赖特定的Model的,如果需要把这个View抽出来作为一个另外一个应用程序可复用的组件就困难了。因为不同程序的的Domain Model是不一样的。

MVP(Passive View)的调用关系

和MVC模式一样,用户对View的操作都会从View交移给Presenter。Presenter同样的会执行相应的业务逻辑,并且对Model进行相应的操作;而这时候Model也是通过观察者模式把自己变更的消息传递出去,但是是传给Presenter而不是View。Presenter获取到Model变更的消息以后,通过View提供的接口更新界面

关键点:

  1. View不再负责同步的逻辑,而是由Presenter负责。Presenter中既有业务逻辑也有同步逻辑。
  2. View需要提供操作界面的接口给Presenter进行调用。(关键)

对比在MVC中,Controller是不能操作View的,View也没有提供相应的接口;而在MVP当中,Presenter可以操作View,View需要提供一组对界面操作的接口给Presenter进行调用;Model仍然通过事件广播自己的变更,但由Presenter监听而不是View。

优点:

  1. 便于测试。Presenter对View是通过接口进行,在对Presenter进行不依赖UI环境的单元测试的时候。可以通过Mock一个View对象,这个对象只需要实现了View的接口即可。然后依赖注入到Presenter中,单元测试的时候就可以完整的测试Presenter业务逻辑的正确性。这里根据上面的例子给出了Presenter的单元测试样例
  2. View可以进行组件化。在MVP当中,View不依赖Model。这样就可以让View从特定的业务场景中脱离出来,可以说View可以做到对业务逻辑完全无知。它只需要提供一系列接口提供给上层操作。这样就可以做到高度可复用的View组件。

缺点:

  1. Presenter中除了业务逻辑以外,还有大量的View->Model,Model->View的手动同步逻辑,造成Presenter比较笨重,维护起来��比较困难。

MVP(Supervising Controller)

 上面讲的是MVP的Passive View模式,该模式下View非常Passive,它几乎什么都不知道,Presenter让它干什么它就干什么。而Supervising Controller模式中,Presenter会把一部分简单的同步逻辑交给View自己去做,Presenter只负责比较复杂的、高层次的UI操作,所以可以把它看成一个Supervising Controller。

MVVM的调用关系

MVVM的调用关系和MVP一样。但是,在ViewModel当中会有一个叫Binder,或者是Data-binding engine的东西。以前全部由Presenter负责的View和Model之间数据同步操作交由给Binder处理。你只需要在View的模版语法当中,指令式地声明View上的显示的内容是和Model的哪一块数据绑定的。当ViewModel对进行Model更新的时候,Binder会自动把数据更新到View上去,当用户对View进行操作(例如表单输入),Binder也会自动把数据更新到Model上去。这种方式称为:Two-way data-binding,双向数据绑定。可以简单而不恰当地理解为一个模版引擎,但是会根据数据变更实时渲染。也就是说,MVVM把View和Model的同步逻辑自动化了。以前Presenter负责的View和Model同步不再手动地进行操作,而是交由框架所提供的Binder进行负责。只需要告诉Binder,View显示的数据对应的是Model哪一部分即可。

优点

  1. 提高可维护性。解决了MVP大量的手动View和Model同步的问题,提供双向绑定机制。提高了代码的可维护性。
  2. 简化测试。因为同步逻辑是交由Binder做的,View跟着Model同时变更,所以只需要保证Model的正确性,View就正确。大大减少了对View同步更新的测试。

缺点

  1. 过于简单的图形界面不适用,或说牛刀杀鸡。
  2. 对于大型的图形应用程序,视图状态较多,ViewModel的构建和维护的成本都会比较高。
  3. 数据绑定的声明是指令式地写在View的模版当中的,这些内容是没办法去打断点debug的。

 

本文转载自:http://www.linuxidc.com/Linux/2015-10/124622.htm

共有 人打赏支持
Y
粉丝 0
博文 11
码字总数 737
作品 0
白银
私信 提问
一点关于Linux mv/rm命令的“有趣事“

今天要说的mv/rm这两个命令的“趣事”是再使用mysql时遇到的。我先将问题贴出来,你也先思考一下,看看你的答案是什么。 环境:mysql5.5,innodb_file_per_table=1 问题:一个mysql实例在跑,...

长平狐
2012/11/01
224
0
Linux-常用命令(一)目录、文件处理命令

目录处理命令:ls 命令名称:ls 命令英文原意:list 命令所在路劲:/bin/ls 执行权限:所有用户 功能描述:显示目录文件 语法:ls 选项[-ald][文件或目录] -a 显示所有文件,包括隐藏文件 -l...

Mysoft
2016/04/11
7
0
nagios+pnp4nagios监控

pnp4nagios 一、安装pnp4nagios ① 预安装:rrdtool和perl-Time* yum install rrdtool perl-Time* -y ② tar -axvf pnp4nagios-0.6.4.tar.gz –C /usr/local/src/ ③ cd /usr/local/src/ ④ ......

perofu
2012/11/06
0
2
Rap说唱音乐《Java Life》MV

Oracle公司为了给2011年JavaONE大会造势,制作了一首Rap说唱风格的歌曲《Java Life》,也叫做《Code Hard!》,这首歌的mv里描述的是一群跟我们一样的程序员在公司的小隔断间里辛苦编程的故事...

aoyanfeng
2011/11/14
634
8
编译 httpd-2.2.34时错误configure: error: ... Error, SSL/TLS libraries were missing or unusable的解决办法

作者:沈小然 环境描述 OS:Red Hat Enterprise Linux Server release 6.8 (Santiago) 编译 httpd-2.2.34时错误configure: error: ... Error, SSL/TLS libraries were missing or unusable的......

LionelShen
01/11
5
0

没有更多内容

加载失败,请刷新页面

加载更多

No transaction aspect-managed TransactionStatus in scope

No transaction aspect-managed TransactionStatus in scope 如果当前事务操作的实现所在方法没有开启事务,就会报出这样的异常。 例如你在A方法调用B方法,B方法开启了事务,A方法没有开启事...

嘴角轻扬30
15分钟前
1
0
SpringBoot整合Redis Lettuce

最近在准备集成的基础框架使用Spring Boot2搭建,其中Redis的支持不仅仅是丰富了它的API,更是替换掉底层Jedis的依赖,取而代之换成了Lettuce(生菜) jedis跟lettuce的区别 Lettuce 和 Jedis ...

lemonLove
22分钟前
1
0
mysqldumpslow 慢查询日志分析工具

首先得配置my.cnf: #====================================================================================================================##=====================================......

吴伟祥
22分钟前
2
0
如何基于阿里云搭建适合初创企业的轻量级架构?

----基于阿里云搭建的适合初创企业的轻量级架构 前言 在项目的初期往往存在很多变数,业务逻辑时刻在变,而且还要保证快速及时,所以,一个灵活多变、快速部署、持续集成并可以适应多种情况的...

阿里云云栖社区
22分钟前
2
0
SpringBoot基础教程4-1-1 使用JdbcTemplate操作数据库及事务管理

1 概述 SpringBoot封装的JdbcTemplate,使用模板模式,去除JDBC繁琐的重复代码,并提供了基于注解的事务管理;下面详细介绍如何使用JdbcTemplate操作数据和事务管理。 2 添加依赖 <dependenc...

Mkeeper
29分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部