MVP架构模式

一、MVP模式图示

MVP 模式将 MVC中的controller 改名为 Presenter,同时改变了通信方向。

特点 :

(1)各部分之间的通信,都是双向的。

(2)View 与 Model 不发生联系,都通过 Presenter 传递。

(3) View 非常薄,不部署任何业务逻辑,称为”被动视图”(Passive View),即没有任何主动性,而 Presenter非常厚,所有逻辑都部署在那里。

M:model层

V:  视图层

P:  协议层(protocol)

二、MVP在iOS中的运用

首先,MVP基于面向协议(protocol)的设计模式。这就意味在工程里面,你需要定义多个协议文件,但是,我们都知道定制一个协议,可能会遵循一些属性或者可选实现必选实现的方法,当P层(controller)遵循这个协议,需要设置代理,由这个代理对象去实现被代理执行的工作。然而,在ios开发中,能用协议实现的,我们大部分都用块直接去回调执行,增强代码的可阅读性和紧凑性。

MVP模式的原则是,在service层提供一大堆不尽相同的业务场景之后,我们将这一系列数据全部抽象归纳,通过定制一套标准的protocol协议,让不同业务场景的都去实现这一协议,最终将数据全部装配、拼装成一套具有相同调度规则的统一编制话数据Model,之后我们采用id的标准去操作数据。

MVP除了将数据逻辑完全镇封的各自的Model,同时将那些Model需要绘制,哪些Model需要校验,

哪些Model需要接受处理点击Action这些逻辑全部由Model自己来决定,Controller只作为一个粘合性的模版,Controller只处理一批具有共性的范型类数据,至于具体的操作操作毫不关心。

MVP面相的更多的是在MVC上层与service之间追加了一层协议层,我们认为通过协议层处理过的数据是暂时可以客户端场景使用的数据,在数据到达MVC我们针对数据进行再加工、再构造处理,这一切全部在容器内操作。这一点完全与别的设计模式相反。

MVP并不是让用户在Model打上网络请求操作、在Model层执行[self.navigationController pushViewController:*]等这些操作,其实相对大多人来说对于部分对象生命周期长短问题还是很在乎,所以在处理TemplateActionProtocol协议的时间,MVP只是对准Action做了一层抽象封装。通过实现TemplateActionProtocol的Model会产生一个Action对象,最终通过block的调用链传回控制器中,我们在控制器中统一做handler处理。

MVP最初设计目的就是为了强调一个装配概念,如果发生了业务场景的追加,控制器我不会改动其中的代码,只需要将新数据追加成相同批次的ViewModel,然后配置进容器,之后控制器不做任何修改就可以满足需求了。通过具体的剥离、抽取我们成功了的最大限度的剥离了控制器,满足了轻量级Controller这一概念

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • MVC 为了将数据模式和视图分离开来,并以控制器作为连接两者的桥梁以实现解耦。 MVC是一种框架模式而非设计模式,...
    官先生Y阅读 640评论 0 0
  • 一.为什么需要软件设计模式? 我们先来定义什么是好的软件架构: 软件架构上具有明确的分工,各个模块的功能职责平衡分...
    Altima阅读 63,352评论 15 26
  • 我们平时开发都使用的是MVC模式,也就是模型-视图-控制器,随着业务逻辑越来越复杂,Activity类一方面要负责...
    SunYo阅读 780评论 0 0
  • 前言 看了下上篇博客的发表时间到这篇博客,竟然过了11个月,罪过,罪过。这一年时间也是够折腾的,年初离职跳槽到鹅厂...
    西木柚子阅读 21,289评论 12 184
  • 今天晚上阿康突然发来一句,高一你收到情书时是什么感觉?我一时记不起高一时收到的情书,我好像没收到过。他却说,...
    阿双啊阅读 443评论 0 0