美文网首页selector
应用层架构之CDD

应用层架构之CDD

作者: 你weixiao的时候很美 | 来源:发表于2018-04-18 17:38 被阅读69次

    本文集是iOS架构方面的备忘(我的博客全是备忘,能不能来点原创Orz...)

    本文是我非常喜欢的iOSer MrPeak的博客的理解和备忘,原文地址:iOS应用层架构之CDD

    这里是demo的地址 CDD的demo

    1.应用层架构定义:

    一个颇具规模的app必然会涉及到分层的设计,还有模块化,hybrid机制,热补丁等等。

    现在不少app都会做一个分层的设计,一般为三层:应用层,service层,data access层。每一层再通过面向接口的方式产生依赖

    • 应用层是直接和用户打交道的。
    • service层在应用层下面,为应用层提供公共的服务接口。一般来说会包含业务数据的处理,网络接口的调用,公共系统服务api封装(比如gps定位,相册,权限控制)等等
    • data access层顾名思义是负责处理我们app的基础数据,有些把data access层又叫做model层。
    2. data flow

    首先:架构的作用,就是拆分代码 ,以低耦合的方式分散业务复杂度。data flow就是数据在你的app里流动的路线。拆分代码后,数据会经历很多拆分后的模块。data flow是架构优劣的测量标准,好的架构一定有清晰的data flow。

    3. CDD架构详解

    以低耦合的方式分散业务复杂度后,分散的各个类文件之间怎么交互,怎么合体。MVC,MVVM,MVP等等都是在解决这个问题。下边是MrPeak的解决方案 Context Dirven Design(context驱动架构):


    cdd结构图

    cdd要达成的目标:

    • view被分解成若干子View, 各自管理。
    • 业务代码放在BusinessObj
    • model变化使用dataHandler处理
    • viewController只放生命周期相关。
    • 子view的展示通过context获取,通过kvo绑定。
    4. CDD的实现细节

    CDDContext就是之前提到的核心类context,还包含CDDDataHandler, CDDBusinessObject基类的定义。

    NSObject+CDD给每个NSObject对象添加一个CDDContext指针。

    UIView+CDD则通过swizzling的方式给每个UIView自动添加CDD。

    CDDMutableArray实现对Array的观察者模型。

    5. 需要完善的细节:
    • 对更多集合类的支持: 入Dictionary
    • BusinessObject 可能业务膨胀
    • 因为通过hack view的 didAddSubview方法给每个view 赋值了context。可以做个限制。
    6. 我的看法:
      1. 作者使用 BusinessObj 和 dataHandle还有树结构的子View来解耦MVC,避免臃肿的controller。
      1. 作者通过用runtime来给每个View添加Context,这样,View,businessObj,dataHandle和controller都持有Context来进行通讯。
      1. context直接持有dataHandle和businessObj。即view通过context拿到数据,view的变化和输入通过context给businessObj。
      1. 作者通过KVO,delegate绑定来将model的变化通知view。

    //通过context来通讯

    相关文章

      网友评论

        本文标题:应用层架构之CDD

        本文链接:https://www.haomeiwen.com/subject/ijqbkftx.html