阅读 38

iOS 优雅地写代码

控制器瘦身

lighter-view-controllers-objc.io

don't repeat ur code! 了解 逻辑的分类: 行为(代理,block,通知,网络请求,增删改查),数据(原始数据,业务数据),视图(可复用,定制化) 将数据与视图相关的处理逻辑抽离出控制器.

<被误解的MVC和被神化的MVVM>读后感

文章地址

  1. YTKNetwork 网络请求的封装 一般产品都会使用网络库,快速高效,并且也可定制. 初级使用方式是侵入式的直接在控制器中使用第三方库. 遍地开花. 入门使用,简单进行封装,隔离变化. 高级使用: 使用设计模式中的 Command 模式,把每一个网络请求封装成对象. 根据网络库的共性 ,定义协议.封装单独的请求类. 方便以后的依赖库更换,灵活使用请求,将请求分为,普通请求,Post文件上传请求,文件下载请求等. 方便在基类中处理公共逻辑. 方便在基类中处理缓存逻辑.以及其它一些公共逻辑。 方便做对象的持久化。

  2. 将界面的拼装抽象到专门的类中 不直接在控制器中初始化一个原始控件 建议: 方法一:构造专门的 UIView 的子类,来负责这些控件的拼装。这是最彻底和优雅的方式,不过稍微麻烦一些的是,你需要把这些控件的事件回调先接管,再都一一暴露回 Controller。 方法二:用一个静态的 Util 类,帮助你做 UIView 的拼装工作。这种方式稍微做得不太彻底,但是比较简单。

  3. 简化控制器逻辑,构造 ViewModel. 这个也需要处理事件回调. 也可以专门将数据存取都抽将到一个 Service 层,由这层来提供 ViewModel 的获取

  4. MVVM 特点: MVVM 在使用当中,通常还会利用双向绑定技术,使得 Model 变化时,ViewModel 会自动更新,而 ViewModel 变化时,View 也会自动变化. 缺点; 第一点:数据绑定使得 Bug 很难被调试。第二点:对于过大的项目,数据绑定需要花费更多的内存。 技术: 具体在 iOS 中,可以使用 KVO , Notification,RA 或者 属性观察(swift),Rx(swift)技术达到这种效果.

  5. 函数式编程(Functional Programming)和响应式编程(React Programming)

因为swift是多范式语言,天然易于实现 函数式,协议式编程.

评论