门户网站开发多少钱,深圳知名广告公司有哪些,wordpress 域名访问还是临时域名,昆明网络公司排行榜完整源码地址
一、iOS_Viper
iOS的Viper架构#xff0c;作为一个从业多年的iOS开发者#xff0c;我个人认为应该要会一点viper
二、前言
viper的设计模式在iOS开发中不流行#xff0c;甚至是Swift中#xff0c;也没有用#xff0c;我认为比较可惜。作为iOSer,当你掌握…完整源码地址
一、iOS_Viper
iOS的Viper架构作为一个从业多年的iOS开发者我个人认为应该要会一点viper
二、前言
viper的设计模式在iOS开发中不流行甚至是Swift中也没有用我认为比较可惜。作为iOSer,当你掌握了viper在设计模式上你能超越90%的同行了。viper理解起来需要一点时间成本但是我希望你能静下心来花一点时间理解它在较大的时间项目中。使用它 前期架构搭建耗时相比mvcmvvm, mvp等设计模式会增加约2天工作日左右。但是后期随着业务的发展以及维护会降低50%维护成本长期看是节省时间提升效率减少加班
三、架构图 3.1 分析架构图
我们写代码中最怕的是什么业务耦合度高此架构最大的优势就是帮助我们把业务解耦同时带来最大的劣势就是使用成本高。因此需要根据项目来选择是否使用viper,而不是盲目推崇viper我们从上往下看我们可以把view理解为一个组织中最高领导者。view的功能只处理UI相关的逻辑例如刷新UI,添加弹窗展示loading等。 view是作为presenter的直接领导所以view强引用presenterpresenter给view汇报工作需要谦卑一点没见过给领导汇报工作还十分嚣张的吧我们这里其实是为了防止循环引用 presenter作为这个组织架构中的中层管理者是最累的角色实际工作中中层领导也是最累的 presenter对上级view需要汇报工作presenter对下级interactor需要指导工作presenter对助手router需要指导工作 router的角色是辅助presenter做一些页面跳转的相关工作interactor作为交互逻辑专职部门主要工作是主导交互的数据处理它的下级是entityentity是底层干活的兄弟们有没有被戳中? interactor指导entity工作强引用entity给interactor汇报工作弱引用
3.2 延展分析
对于entity我们其实可以理解为数据处理层在实际的较为复杂的业务场景中可以参照如下模式对entity进行进一步细分
四、代码解析 Swift提倡的是面向协议编程我们把这5个模块都定义成协议 对viewProtocols的分析 可以看到viewProtocols是为view服务的列举了4个常见的方法刷新视图展示loading展示错误隐藏loading 对presenterProtocols的分析 presenter 需要持有view实现的时候要注意使用弱引用viewDidLoad方法是在view需要主动调用的presenter 需要持有router这里因为是单方面引用所以需要用强引用presenter 需要持有interactor因为是上级所以强引用didInteractorRetrieveData方法顾名思义就是interactor给presenter的回调方法 对routerProtocls createTabBarVC方法就是一个静态方法在appdelegate启动后创建根视图所用的addChildViewController就是给UINavigationController提供一个初始化vc的方法这里的vc就是我们架构中的view层pushToNextVC方法不用过多解释了就跳转带参数方法 对interactorProtocols的分析 interactor需要弱引用上级presenter提供一个给presenter主动调用的方法interactorRetrieveDatainteractor强持有下级entitydidEntityReceiveData就是entity的数据回调方法 对EntityProtocols的分析 entity弱引用上级interactorretrieveData是给interactor主动调用的方法didReceiveData是回调方法
五、实际业务代码目录分级
上面是为了详细分析从而把代码分多个文件夹实际项目中根据业务情况可以简单这样划分即可。
这样分级结构清晰又不会显得太冗余
六、代码打印分析 调用顺序以及回调顺序和我们的架构图是保持一致的。
完整源码地址