Skip to content
林光亮 edited this page Sep 23, 2016 · 3 revisions

中文

什么是Pbind

Pbind的全称是Property Binding,基于iOS的Plist配置文件实现的一套数据绑定方案。

为什么需要Pbind

当今移动端的主要趋势是插件化与组件化。

组件化

组件化,为了项目解耦,作用于软件的开发时期,主要包括以下几种形式:

  1. 官方:多subproject依赖
  2. 第三方:CocoaPods, Carthage

对于小公司来说,建议使用官方方案,可以在一个repo完成所有事情。 第三方的方案通常为多repo,这会导致repo同步带来的大量的时间消耗。 比如说CocoaPods的发布 pod trunk push,以及更新 pod update,都是一个巨痛苦的过程。

插件化

插件化,主要指热插拔技术,为了App的动态更新,作用于软件的发布时期。主要包括以下几种形式:

  1. 官方原生:NSBundle + Cocoa Touch Framework(代表框架Small,局限是仅适用企业版)
  2. 官方脚本:JavascriptCore + Runtime + Javascript (代表框架JSPatch
  3. 第三方脚本:LuaEngine + Lua(代表框架LuaView

组件化跟插件化从根本上来说其实就是两个核心的诉求:

  1. 提高开发效率
  2. 动态更新能力

Pbind基于这两个诉求,提出了配置化的理念。

配置化

  1. 关于提高开发效率,我们知道通常开发一个App,大部分时间还是耗费在UI开发上。

产品或者UI设计通常会让你改一条线的粗细、字体大小、背景颜色、边距等等。如果你是一个负责的、追求完美的开发,你将需要频繁调试来保证UI细节。 那么能否将这些需要频繁调整的属性参数进行配置,实现实时调试呢?

基于Plist,我们实现了这点。通过KVC技术,我们可以把解析Plist得到的NSDictionary赋值到指定View的各个属性上。 由于配置文件是无需编译的,这意味着在模拟器上可以通过监听文件改变,实现实时刷新,大幅提升开发效率。

  1. 关于动态更新,我们首先关注下,有哪些代码需要频繁变更、容易产生bug?

首当其冲的应该是数据处理部分,如果服务端返回的数据异常,客户端极有可能出现一些异常,如:

- 空指针
- 数组越界
- 显示错误

Pbind为此引入了Client概念,将HTTP、Database、NSUserDefaults等等归类为PBClient,由用户实现相应的接口,返回标准的PBResponse对象,再经由Plist实现数据绑定的配置化。

由于配置文件是可动态下发的,这意味着所有可配置的数据处理逻辑单元都具备动态更新的能力。

Clone this wiki locally