-
Notifications
You must be signed in to change notification settings - Fork 7
Home
林光亮 edited this page Sep 23, 2016
·
3 revisions
Pbind的全称是Property Binding,基于iOS的Plist配置文件实现的一套数据绑定方案。
当今移动端的主要趋势是插件化与组件化。
组件化,为了项目解耦,作用于软件的开发时期,主要包括以下几种形式:
- 官方:多subproject依赖
- 第三方:CocoaPods, Carthage
对于小公司来说,建议使用官方方案,可以在一个repo完成所有事情。 第三方的方案通常为多repo,这会导致repo同步带来的大量的时间消耗。 比如说CocoaPods的发布
pod trunk push
,以及更新pod update
,都是一个巨痛苦的过程。
插件化,主要指热插拔技术,为了App的动态更新,作用于软件的发布时期。主要包括以下几种形式:
- 官方原生:NSBundle + Cocoa Touch Framework(代表框架Small,局限是仅适用企业版)
- 官方脚本:JavascriptCore + Runtime + Javascript (代表框架JSPatch)
- 第三方脚本:LuaEngine + Lua(代表框架LuaView)
组件化跟插件化从根本上来说其实就是两个核心的诉求:
- 提高开发效率
- 动态更新能力
Pbind基于这两个诉求,提出了配置化的理念。
- 关于提高开发效率,我们知道通常开发一个App,大部分时间还是耗费在UI开发上。
产品或者UI设计通常会让你改一条线的粗细、字体大小、背景颜色、边距等等。如果你是一个负责的、追求完美的开发,你将需要频繁调试来保证UI细节。 那么能否将这些需要频繁调整的属性参数进行配置,实现实时调试呢?
基于Plist,我们实现了这点。通过KVC技术,我们可以把解析Plist得到的NSDictionary赋值到指定View的各个属性上。 由于配置文件是无需编译的,这意味着在模拟器上可以通过监听文件改变,实现实时刷新,大幅提升开发效率。
- 关于动态更新,我们首先关注下,有哪些代码需要频繁变更、容易产生bug?
首当其冲的应该是数据处理部分,如果服务端返回的数据异常,客户端极有可能出现一些异常,如:
- 空指针
- 数组越界
- 显示错误
Pbind为此引入了Client概念,将HTTP、Database、NSUserDefaults等等归类为PBClient,由用户实现相应的接口,返回标准的PBResponse对象,再经由Plist实现数据绑定的配置化。
由于配置文件是可动态下发的,这意味着所有可配置的数据处理逻辑单元都具备动态更新的能力。