这是我参与更文挑战的第26天,活动详情查看:更文挑战
MVP模式
MVP模式,Model-View-Presenter,MVP可以说是MVC的演进的框架模式。MVP模式可以有效降低View复杂性,避免业务逻辑过多堆积在视图层,解除视图层和模型层的耦合性同时具有良好可扩展性、可测试性,保证系统整洁、灵活。
架构分层
模型(M-Model)
模型层负责数据的增删改查,像是服务端的网络请求,客户端的本地缓存等。模型层不能简单理解为数据模型层,数据模型是本质数据,但模型层还负责将数据处理转化为能够为上层服务的数据模型。
视图(V-View)
视图层,和MVC当中V是一样负责UI的渲染、子视图的组织、UI事件、用户交互等页面操作。在框架中视图层是比较灵活轻巧的一层框架,主要调用控件操作执行相应事件。视图层主要就负责发送事件后相应反馈结果,以用户交互可理解的形式存在。
主持人(P-Presenter)
主持人,和MVC模式唯一不同的一层框架。Presenter作为中间人和Controller一样是起到桥梁作用。不同于MVC数据单向流通,Presenter是从Model层获取数据后,通过接口将数据发送给View层做展示;View层通过用户交互将事件发送给Presenter处理;在其中Presenter会去处理业务逻辑;可能涉及到数据更新Presenter就会去操作Model层保存最新数据;在业务处理完成之后Presenter最后就会告知View层去刷新UI展示最终结果。
MVP和MVC的区别
MVC是用户可以向View发送指令,View可直接Model做修改;同时用户也可以通过Controller发送指令,再去通知View去刷新视图;Controller主要起到事件路由的作用,业务逻辑包含在Controller当中。相比较而言虽然MVC是有做到解耦,但并非绝对,View可直接访问Model,造成三个角色存在一定紧密关系。
在MVP模式下View更新是需要通过Presenter实现,View不能直接发送指令到Model而只能通过Presenter来实现,View和Model之间的通信桥梁只有Presenter。Presenter作为中间件真正起到了将View和Model相隔离。
MVC | MVP |
---|---|
![]() |
![]() |
参考
- 《Android源码设计模式》