推荐阅读:
概述
MVP模式属于UI框架模式的一种,随着UI技术的功能日益丰富,View层也履行着越来越多的职责。为了更好地细分视图(View)与模型(Model)的功能,让View专注于处理数据的可视化以及与用户的交互,同时让Model只关系数据的处理,基于MVC概念的MVP(Model-View-Presenter)模式应运而生。为了更好的理解MVP,那就必须先了解MVC。了解了MVC后动手实践一个MVP的案例,然后进行总结。
MVP与MVC对比
(1)相通之处
因为MVP是由经典的设计模式MVC演变而来,它们的基本思想有相通之处:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。
(2)MVC的缺陷
- 在MVC模型里,更关注模型层(Model)的不变。因为一个模型层(Model)可以被多个视图层(View)重用,Model不依赖于View,但是View是依赖于Model的。
- 在MVC模型里,视图层无法实现独立重用。视图层需要持有控制层Activity的引用才能进行UI引用。不仅如此,视图层(View)是可以直接访问模型层(Model)的数据,从而视图层不可避免会涉及一些业务逻辑。由于在View里实现的业务逻辑是无法被重用的,导致要更改和重用View变得比较困难。
- 由于模型操作接口的不同,视图可能需要多次调用模型才能获得足够的显示数据,不必要的频繁访问未变化数据的,也损害一定性能。
(3)两者区别
在MVP中视图层(View)不能直接访问模型层(Model),它们之间通过Presenter(Controller)来进行通信的。这一点很好的弥补了MVC的设计缺陷,使View与Model实现完全分离。View无法直接从Model中读取数据,所有的交互都发生在 Presenter层(Controller)。如下图所示:
