五、不同层次的定制能力
作为组件的提供商,需求方对于组件定制有不同的诉求,从小到大分大致可以拆分为:按钮颜色的定制、图标替换、字体大小的定制;布局逻辑的定制;数据源定制;小组件替换;页面替换。
不同的诉求应该用不同的方案解决,成本低的方案不灵活,灵活的方案成本高(代码多),做组件化接入时最考验的就是眼力见,对将来的定制化诉求做出提前预估,需要警惕过度设计(over-designed)。这时候需要两个人:一个能凑合用先凑合用的人、持续维护过程中不断被坑的人,使得两者达到力量的完美平衡(和谐)方成大道(大误)
5.1 按钮颜色的定制、图标替换、字体大小的定制
一套 UI 代码在 N 个不同的 App 中被集成的时候一定会遇到定制具体色值的问题。这种多 App 的场景的特点在于不同的 App 有自己的色值规范,红色、橙色、蓝色之间有不同色彩定义。为了减少代码的使用,可以考虑使用全局变量+宏定义的形式。
1 | @interface ColorDefine : NSObject |
在 initialize 的时候根据宏定义初始化不同的颜色。
1 | #import "ColorDefine.h" |
UIAppearance
也可以使用 UIAppearance 的形式来解决
5.2 布局逻辑的定制
当一个页面在不同情况下需要展示成不同的样式。如下图,子组件数量、样式基本一致,只有布局和部分细节不同。
可以考虑抽象出基类,提供默认的布局方式,同时将需要被布局的子控件以属性的形式暴露出去,子类继承时直接访问自控件就能够达到修改布局的目的

5.3 数据源的替换
作为组件的提供方,不同接入方都会提出期望自己的数据不同于其他业务。比方说在编辑的场景中的贴纸列表,在不同的 app 从网络请求接口到内部实现细节都会不一样。

这种解决思路就是:依赖注入。这里推荐一个框架objection
六、Service 共享基础设施
七、session 生命周期管理
1 | [[KSProductionSessionManager shareManager] retainSession:self]; |
session 生命周期比较长,不应该被任何对象持有(所有的引用都应该是 weak),建议使用KSProductionSessionManager 显式 retain 、release 保证 session 的生命周期