多态协议(Polymorphic protocol)
定义标准接口(interface),各端模块各自独立实现,编译时和运行时对实现的接口输入输出做检查。
主要2个目标:
- 保障多端可维护性
- 编译时拆分多端代码
Chameleon的是多端的上层应用语言,在这样的目标下,用户扩展功能时,保障业务代码和各端通信一致性变得特别重要。
用户也许只实现一个API跨2端,保障一致很简单,在一个超过5万行代码的复杂应用里,用户扩展了100个接口呢,如果你觉得还很简单,那跨6个端呢,在应用持续高速迭代中让用户人肉保障多端一致性实在太艰难,即使能做到,可维护性也会极差,跨端也会失去意义。
以上,跨端很美好,最大风险是可维护性问题。多态协议
是Chameleon业务层代码和各端底层组件和接口的分界点,Chameleon会严格“管制”输入输出值的类型和结构,同时会严格检查业务层JS代码,避免直接使用某端特有的接口,不允许在公共代码处使用某个端特定的方法,即使这段代码不会执行,例如禁止使用window
、wx
、my
、swan
、weex
等方法。
统一多态协议设计的灵感来自于Apache Thrift - 可伸缩的跨语言服务开发框架,本质上跨端也属于跨语言。它能让Chameleon开发者快速接入各个客户端底层功能,且不会因为各端接口差异、产品需求差异导致正常业务代码被打散,变得可读性差、难以维护,避免结果适得其反,具体Case;各个客户端底层功能实现可以一部分来自Chameleon提供的基础组件和基础api库,一部分来自chameleon开发者,一部分来自各端生态开源库(Chameleon拥抱开源社区,你可以直接安装某个端的组件在使用多态协议扩展到某个端使用)。