首页天道酬勤ios架构设计,iOS编程 架构设计模式

ios架构设计,iOS编程 架构设计模式

张世龙 05-04 04:02 29次浏览

MVP与MVC相比,presenter充当中间人,将VC逻辑迁移到此处。 正向: Presenter获取网络数据,通过代理向v通知行为,并跳转或更新UI。 相反: View用户交互触发,通过协议告诉Presenter我变了,而你的Presenter知道通过View的协议方法改变数据。 前面的iOS高级体系结构设计MVC(1)刚刚阐明了什么是真正的MVC,以及MVC相对于大型项目的缺点。 现在学习架构设计MVP吧。

MVP MVP模式是MVC模式的进化版本,所有模式似乎都来自MVC~~。 MVP的全名是Model-View-Presenter。 thdcs,

模型:与MVC的模型没有很大的区别。 主要提供数据的存储功能通常用于封装通过网络获取的json数据集合。 Presenter调用Model来交换对象。

视图:此视图可以控制视图控制器、视图等。 View负责界面的展示和布局管理,向Presenter暴露视图更新和数据获取的界面

presenter :作为model和view的中间人,从model层获取数据并传递给view,解除view和model的结合。 Present中间层负责UI的变更和及时的数据更新; 更改数据和及时更新UI

说了很多,反正MVP的好处是解除view和model的耦合,提高view或model的复用性。 MVP的面向协议的编程思想。 那MVP模式呢? 请参阅下图

控制器实际上将视图和视图控制器传递给p层,这样p层实际上拥有控制器的权利,可以完全行使控制器的职责。

Controller还拥有一个Presenter,因此只需调用暴露p层的接口,即可完全完成业务逻辑和整个页面的演示

关于c端和p端的循环参照问题,可以直接用weak关键字解决

例1

ViewController类是UI层,它提供了tableview独特的协议,并提供了与用户交互的协议UserViewProtocol。 也就是说,presenter向UI层发送命令实际上是发送到UI层的ViewController,实际上是控制器被动地更新UI,无论是MVC还是MVP,view的实际控制权都是view 项目总体框架:

demo地址https://github.com/linfei fei123/MVP.git

例2分析我使用的MVP结构的流程。

以下是一些常见问题

Q:可以用MVP解决什么问题?

我不知道a:zydm们解决了什么问题,总之我把原本属于ViewController的业务逻辑代码提取到Presenter中,实现了展示层-业务层代码分离。

Q:一个接口通常有一个UIViewController和多个子view,您有多少个Presenter?

A:的典型做法是在复杂接口的一个子视图中使用一个Presenter (该Presenter绑定着该子视图),在简单接口的一个控制器中使用一个Presenter

q:presenter据说可以隔离模型和视图,是怎么实现的呢? 像我的UITableView/UICollectionView这样需要大量数据的view怎么能隔离呢?

A:将UITableViewDataSource (数据源代理)设置为Presenter,并在Presenter中完成cell赋值

Q:可以不要用MVP写代码吗?

虽然A:增加了用MVP编写的代码,但修复错误变得简单了。 因为代码逻辑已经很清楚了

iOS-OC MVP结构的实际应用

这种做法我比较赞赏: https://github.com/Duncan LII/MVP demo.git

总结:读了很多文章,觉得MVP很难理解或者没有明确的标准。 p层太多或太少,很难拿,很难用于MVC。 其实请记住MVP的核心。 为View断开与模型的连接。

几乎没有权威的文章。 看看这个在IOs中使用的MVP交换机。 其中的名字不利于理解,所以要更改几个类名。 已修改的MVPDemo

其实MVP和MVC最大的区别是以协议为导向进行编程,将数据请求和逻辑放入presenter中。 presenter与协议和View、VC进行通信,通过更新View的状态,实现Model和View的解耦,同时减少VC内的代码。

阅读以下几篇文章,可能有助于组织实现。 慢慢消化。

感谢iOS-OC MVP结构的实用化

ios MVP的分析与理解

iOS-基于面向协议的MVP模式下的软件设计体系结构设计

浅谈MVP在ios(oc ) IOs项目中的使用及Demo

控制器瘦身法:剥离UITableView,封装数据来源和删除

控制器瘦身型二:面向协议编程MVP模式,去耦m和v

,