1.MVP模式
MVP(Model-View-Presenter)模式提供数据,View负责显示,Controller/Presenter负责逻辑的处理。MVP是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。当然MVP与MVC也有一些显著的区别,MVC模式中元素之间“混乱”的交互主要体现在允许View和Model直接进行“交流”,这在MVP模式中是不允许的。在MVP中View并不直接使用Model,它们之间的通信是通过Presenter(MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会直接从Model中读取数据而不是通过Controller。
2.MVP的结构
MVP不仅仅避免了View和Model之间的耦合,还进一步降低了Presenter对View的依赖。Presenter依赖的是一个抽象化的View,即View实现的接口IView,这带来的最直接的好处,就是使定义在Presenter中的UI处理逻辑变得易于测试。由于Presenter对View的依赖行为定义在接口View中,只需要一个实现了这个接口的View就能对Presenter进行测试。MVP的结构如图1所示。
图1 MVP设计模式
3.MVP的优点
使用MVP模式来设计表现层,可以有以下的优点。
(1)模型与视图完全分离,可以修改视图而不影响模型。
(2)可以更高效地使用模型,因为所有的交互都发生在一个地方——Presenter内部。
(3)可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑。这个特性非常的有用,因为视图的变化总是比模型的变化频繁。
(4)如果把逻辑放在Presenter中,就可以脱离用户接口来测试这些逻辑(单元测试)。
目前,MVP模式被更多地用在Android开发当中。