MVP与MVC的主要区别
】是,
MVP中的View不能直接访问Model,
需要通过Presenter发出请求,View与Model不直接通信。
另外,
耦合性高的MVC,相对于MVP、MVVM,
可读性、健壮性、可拓展性都大打折扣,也不便于测试;
【MVC缺点的对立面,就是MVP、MVVM的优点】降低View复杂性
,
避免业务逻辑被塞进View中,
使得View变成一个混乱的“大泥坑”。可扩展性、可测试性
,
保证了系统的整洁性、灵活性
。MVVM与MVP非常相似, 它们间的区别: View和Model进行双向绑定(data-binding), 两者之间有一方发生变化则会反应到另一方上; MVP中的View更新需要通过Presenter, 而MVVM则不而需要, 因为View与Model进行了双向绑定, 数据的修改会直接反应到View角色上, 而View的修改也会导致数据的变更。 ViewModel角色需要做的只是
业务逻辑
的处理, 以及修改View
或者Model
的状态。 【MVVM模式有点像ListView与Adapter、数据集的关系】 这个Adapter
就是ViewModel
角色, 它与View进行了绑定,又与数据集进行了绑定, 当数据集合
发生变化
时, 调用Adapter
的notifyDataSetChanged
之后View
就直接更新
, 它们之间没有直接的耦合
,使得ListView
变得更为灵活
。
Activity
代码架构性能提升不少;
3 .【数据双向绑定】
当Model变化时,View-Model会自动更新,View也会自动变化。
很好做到数据的一致性,MV联动比MVP快捷、灵活;M
可以由数据Bean类(结合数据文件)实现;
C
即控制/调度逻辑
、业务逻辑
【业务功能实现】,由Activity
实现;
V
则xml布局文件
与UI逻辑
【UI逻辑由Activity
实现】;
事件路由
的作用,
同时业务逻辑都部署在Controller(Activity)中。Presenter成员变量
。
通常View需要实现一个逻辑接口,
将View上的操作通过会转交给Presenter进行实现,
最后,
Presenter调用View逻辑接口将结果返回给View元素。简单说,
M
可以由数据Bean类(结合数据文件)等实现;
V
则xml布局文件
与UI逻辑
,
【UI逻辑分UI逻辑接口
,UI具体逻辑
,
UI逻辑接口
是定义接口实现,
UI具体逻辑
由Activity(Fragment)
实现UI逻辑接口具体实现】;
P
即控制/调度逻辑
、业务逻辑
【业务功能实现】,
由业务逻辑接口
、业务逻辑接口实现类
实现;
元素小结:
数据封装类,
【一套业务中,下面四个元素是必须的,
UI逻辑实现类
use 业务逻辑实现类
,
业务逻辑实现类
依赖 UI逻辑接口实例
,
类文件名、文件中逻辑,相互对应,形成一套业务!】
UI逻辑接口,UI逻辑实现类(Activity/Fragment),
业务逻辑实现接口,业务逻辑实现类UI逻辑接口
抽象UI实现的逻辑;UI逻辑实现类(Activity/Fragment)
实现UI逻辑接口
方法,具体实现UI逻辑
【更新UI、启动UI动画等】;
【VP】
准备一个业务对应的Presenter成员变量
,
用于在对应时机调度Presenter
的业务方法
,
也调度对应的Presenter
的绑定方法,
让Presenter
与自身绑定;业务逻辑实现接口
抽象业务逻辑方法,业务逻辑实现类
实现业务逻辑实现接口
的逻辑方法;
【PV】
准备一个UI逻辑接口
成员变量 还有 一个绑定方法,
用于 绑定 UI逻辑接口
实例,
UI逻辑接口
实例 可以 用来调用 UI逻辑实现类
中的 具体实现的 UI方法
,
调用的时候可以把数据操作
获得的数据也传过去View层
;
【PV、PM】
业务逻辑实现类
中 实现的一系列 业务方法
,
每一个 业务方法
其实就是对某种场景要实现的业务逻辑的封装,
也就是业务方法
中,封装了一系列逻辑,
也封装了一系列数据操作
的方法, 和UI逻辑方法
;【PV、PM】一个
UI逻辑实现类(Activity/Fragment)
可以实现多个UI逻辑接口
, 绑定多个业务逻辑实现类
, 以便调用多种业务逻辑
, 实现多套业务; 另外, 多个UI逻辑接口
之间, 多个业务逻辑接口
之间, 重复的部分可以进一步进行抽象;(可参考文首博客)
UI逻辑
在UI逻辑实现类(Activity/Fragment)
中具体实现,
在业务逻辑实现类
中被调用;
业务逻辑方法
在业务逻辑实现类
中具体实现,
在UI逻辑实现类(Activity/Fragment)
中被调用;
View层
,也就是UI逻辑实现类(Activity/Fragment)
要访问数据的时候,
一般都不是直接在自己类中具体实现数据操作
逻辑的,
而是通过调用业务逻辑实现类
【P】的业务方法
,
间接调用到业务方法
中的数据操作
逻辑;
即,MV解耦,
V层制作V层的实现,其他的,都是只是上层的调度,不实现;参考文章: