MVP是针对有GUI存在的应用程序,比如安卓苹果以及pc客户端用以划分组织代码的一种设计模式。从MVC模式升级演进而来,目的是将数据层,逻辑层及UI层进行区分。
• Model – 为UI层提供的数据,或者保存UI层传下来的数据
• View – 单纯的展示数据,响应用户操作并都转发给Presenter来做具体的处理
• Presenter – 逻辑控制层,从Model处取数据,运算和转化,最后用View来展示;并处理View传过来的用户事件,并做处理
需要注意的是MVP仅用于应用中的GUI部分,它并不是整个应用的架构方式。一个应用的主要的架构应该包括基础组件,业务逻辑层和GUI展示层,而MVP仅是用于展示层的设计模式。另外,它是一个方法论的东西,没有固定的实现方式,只要能体现出它的方法就可以算是MVP。
指导性的约束条件
• Model与View不能直接通信,只能通过Presenter
• Presenter类似于中间人的角色进行协调和调度
• Model和View是接口,Presenter持有的是一个Model接口和一个View接口
• Model和View都应该是被动的,一切都由Presenter来主导
• Model应该把与业务逻辑层的交互封装掉,换句话说Presenter和View不应该知道业务逻辑层
• View的逻辑应该尽可能的简单,不应该有状态。当事件发生时,调用Presenter来处理,并且不传参数,Presenter处理时再调用View的方法来获取。
MVP的目的就是把GUI的逻辑集中在Presenter层,从而把View层和Model层与所用接口进行分离,简化view,从而增加代码的可移植性,
严格来讲,View只是被动的显示,提供方法由Presenter来调用,数据等都是由Presenter来提供,内部不能任何的逻辑与状态,逻辑和状态都应该是在Presenter中。
UI事件发生时,调用Presenter的方法来处理,不能传参数,也不能有返回值,在Presenter中处理后再调用View来更新数据和状态。