半路出家自学iOS至今2年半,这是我写的第一篇技术博客。在学习和做项目的过程中,踩了N多坑,早期的时候写的项目是不折不扣的"MVC"(Massive View Controller),换了家公司之后,有了iOS团队,不再是自己孤军奋战,我也能从别人的代码中去学习体会,逐渐掌握了传统的MVC的开发,期间也试过MVVM的设计模式结合RAC的效果如何,在稍微做了些项目之后,也开始逐渐思考,一个app,或者说一个应用,该如何设计其架构才算是比较优秀,或者说比较合适呢?
写这篇博客,将我现在在用的一种类似MVP的设计模式记录下来。
设计模式:MVP+Observe , 在控制器中弱引用presenter或者presenter的data
一个常规的页面模块,我的项目中会有这5个子模块:
Handler为网络请求工具类;
Presenter为页面的数据管理类,是数据的提供者,数据变化的控制者(controller和view此处都被认为是页面);
Model,View, Controller 都是MVC常规概念,不一样列举了。
用一个presenter可以去管理多个页面所的数据,以一个主页面为锚,去持有presenter的实例,其他子页面仅弱引用presenter或者presenter的data,并在这些页面内直接监听数据变化并刷新UI。
presenter调用handler去取数据,比如是数组,那么创建一个数组强引用取到的数据,给外部使用的可以是弱引用与该数组元素的数组。如果直接将该强引用的数组给到页面,可以这么干
如此一来,其实数据相关业务都被剥离出去了,如果页面想要修改数据,那么需要调用presenter的公开方法,由presenter去修改原始数据。
presenter修改了原始数据,所有弱引用的页面的数据即同步变化了(本来就是同一个数据)。接下来的步骤是刷新UI。
采用RAC的监听方法,可以较优地达到这个目的,当然也可以用通知或者代理或者block或者系统的数据监听来刷UI。
这种设计模式,能够尽量做到控制器业务分离,数据的简洁唯一,并且由此能由数据驱动UI的自动更新。
抛砖引玉,希望大家不吝赐教。