关于Controller方面的总结__以及资料收集

来源:互联网 发布:imap smtp 端口 编辑:程序博客网 时间:2024/05/16 15:25
  一.基于三层设计思想
  1. 数据层
  (1).网络类:根据项目需求基于AFNetworking对网络层进行封装
  (2).封装要求:完成需求前提保证对sign,token等认证进行封装
  (3).环境类:需将设备信息,error_code,SDK:KEY_ID配置文件化
     ,宏切换服务端口,公共参数,Ipv4/Ipv6切换


  2.业务层
  (1).结构规定:viewDidLoad(addSunView)/viewWillAppear
   (layer)/viewDidAppear(Notification)
  (2).书写顺序:lifecycle/Delegate/event response/gettersand setters
  (3).关于布局:Autolayout/Masonry(三方约束工具)
  *胖model与瘦model思想


  由于项目大,controller出现膨胀囊肿问题,为了解决controller囊肿问题
  胖Model:controller从胖model中拿到数据后,不用额外做操作,火势只做非常少的操作,就能够将数据直接应用在view上


  瘦Model:只负责业务数据的表达,所有业务不论强弱一律扔到controller,瘦model目的是尽可能细粒度Model,然后配合helper类对弱业务处理,强业务交给controller(软件膨胀 model不会膨胀)


  *MVCS是典型的瘦Model架构思路,将原本Model要做的事情的其中一部分关于数据存储的代码抽象成Store,在一定程度降低Controller的压力.


  例:字符串转换,计算动态cell高度,model做了类似弱业务代码,使controller变得skinny,controller只需要关注强业务代码就行了.


  强/弱业务_补充:
  强业务:变动可能性大,一般写在controller中
  弱业务:变得可能性小,出现频率大于弱业务,相对强..稳定多,所以可以塞Mmodel中(这样做可以起到瘦身controller作用)


  *MVVM和MVCS区别:
  不管MVVM也好,MVCS也好,他们的共识都是Controller会随着软件的成长,变很大很难维护很难测试。只不过两种架构思路的前提不同,MVCS是认为Controller做了一部分Model的事情,要把它拆出来变成Store,MVVM是认为Controller做了太多数据加工的事情,所以MVVM把数据加工的任务从Controller中解放了出来,使得Controller只需要专注于数据调配的工作,ViewModel则去负责数据加工并通过通知机制让View响应ViewModel的改变。


MVVM是基于胖Model的架构思路建立的,然后在胖Model中拆出两部分:Model和ViewModel。关于这个观点我要做一个额外解释:胖Model做的事情是先为Controller减负,然后由于Model变胖,再在此基础上拆出ViewModel,跟业界普遍认知的MVVM本质上是为Controller减负这个说法并不矛盾,因为胖Model做的事情也是为Controller减负。


另外,我前面说MVVM把数据加工的任务从Controller中解放出来,跟MVVM拆分的是胖Model也不矛盾。要做到解放Controller,首先你得有个胖Model,然后再把这个胖Model拆成Model和ViewModel。


*MVVM摘要:在MVC的基础上,把C拆出一个ViewModel专门负责数据处理的事情,就是MVVM


*Controller:在MVVM中,一方面负责View和ViewModel之间的绑定,另一方面也负责常会的UI逻辑处理.


三:拆分

(MVC体系下可以衍生无数的架构方式,万变不离其宗,他一定符合MVC的规范)


  一:保留最重要的任务,拆分其他不重要的任务
(只要不是Controller得核心逻辑,都可以考虑拆出去,在架构的时候作为一个队里模块去定义,以及设计实现)


二:拆分后的模块要尽可能提高可复用性
(最好拆分出来的类归成一个对象,达到抽象成一个逻辑出来,使他能够复用)


三:要尽可能提高拆分模块后的抽象度
(达到对外开放最少的信息条件,使Controller负责较小的模块的调度,达到给Controller减负的作用)


例:封装发送消息类,达到(发送文字,图片,语音,视频)
答:可使用枚举区分,对外保留(数据,类型)接口,根据发送条件做相应的发送,并只返回Controller想要的成功/失败 结构(达到较小参数输入,结果输出,Controller不参加处理只参加调度)


四:设计
一:尽可能减少继承层级,设计苹果原生对象的尽量不要继承


二:做好代码规范,规定好代码在文件中的布局,尤其是ViewController
(提高代码可维护性:life cyyle(生命周期),Delelgate,event response, private method ,setter getter)


三:能不放在Controller做的事情尽量不要放在Controller里面做
(尽量做到放在model层去处理,宁可造成胖Modle拆分,也不做胖Controller拆分)


心法四:架构师是为业务工程师服务的
例:- (NSString *)saveImageWithData:(NSData *)imageData


例:- (NSString *)saveImage:(UIImage *)image


哪种更好;


小总结:
针对View层的架构设计(三点):代码规范,架构模式,工具集


总结:
要做一个View层架构,主要从三方面入手:


1.指定良好的规范
2.选择好合适的模式(MVC/MVCS/MVVM/VIPER)
3.根据业务情况针对ViewController做好拆分,提供一些小工具方便开发
0 0
原创粉丝点击