1.2 数据绑定
数据采集后需要进行相应的数据绑定操作,接下来将从控件数据绑定和内容曝光框架两个方面进行介绍。
1.2.1 控件数据绑定
在控件数据绑定中比较通用的解决架构是MVVM(Model-View-ViewModel)模式,如图1-2所示。MVVM模式的最大亮点是双向绑定。
图1-2
单向绑定的数据流向是单向的,只能从Model层流向View层;双向绑定的数据流向是双向的,当业务代码中的数据发生改变时,View层上的数据能够得到刷新;当用户通过View层交互编辑了数据时,数据的变化也能自动更新到业务代码中的数据上。对于双向绑定,刚好可以使用DataBinding,DataBinding是一个实现数据和View层绑定的框架,是构建MVVM模式的关键工具。因此在Android中实现MVVM模式很方便,而在iOS中还要使用block回调,或者使用reactiveCocoa库。
要使用DataBinding,就需要添加DataBinding到Gradle的构建文件中,代码如下:
1. android { 2. ... 3. dataBinding { 4. enabled = true 5. } 6. }
DataBinding方案解决了数据和控件绑定的耦合问题,使ViewModel和View层的交互变得更简单,数据通过DataBinding更好地实现了与控件的绑定。
使用DataBinding实现了数据和表现的分离,如果结合响应式编程框架RxJava 、RxAndroid,编码体验和效率还能进一步提高。
由于数据绑定实现了数据和表现的分离,由DataBinding框架对接View层,可以通过自定义Adapter干预某些属性的读取和设置,比如,拦截图片资源的加载(换肤)、动态替换字符(翻译)等功能。
这样也方便了UI的复用,在Android上进行View层组件化的时候,可以在布局的层次上进行复用,与业务无关的UI逻辑也能一起打包,同时对外接口(数据模型)仍然简单,学习接入成本更低。
讲完了数据绑定,接下来主要介绍数据内容的曝光。
1.2.2 内容曝光框架
内容曝光框架主要从曝光存在的问题、相关的自动化规则,以及对应流程图等方面来介绍。
1.曝光存在几方面问题
(1)定义复杂,比如,用户看到才算曝光,曝光之后不能重复曝光。这些定义都会导致较多的逻辑代码,你需要管理曝光缓存,需要确认如何才算“看到”。
(2)测试难,相对于点击事件有明确的用户行为,曝光的用户行为可能没那么明确,比如,用户滚动列表或者刷新数据都会导致曝光逻辑变化。
(3)自定义组件,如针对横幅,什么时候算用户看到?自动滚动算不算曝光?这些逻辑与通用的曝光逻辑有所不同。
2.自动化曝光的规则
(1)曝光定义:元素曝光时长超过500ms且元素曝光面积大于50%(元素曝光时长和元素曝光面积可基于实际情况设定)。
(2)当前页面元素已经曝光,如果元素希望被再次展现,只有当前业务消失过或业务方主动调用刷新接口,才能算曝光。
(3)当前页面元素的曝光会在页面退出时或同一区块数据累积大小超过一定的设定值(如30KB)时产生(即多条曝光日志合并成一条上报,需要后期解析处理)。
图1-3是整体自动化曝光框架的框架设计图。
图1-3
上面的框架设计图支持以下功能。
● 支持采集点击事件、曝光事件等。
● 支持多个场景:列表滑动、列表自动滚动、页面内窗口切换、选项卡切换、进入下一个页面、应用前后台切换等。
● 支持扩展:数据提交、曝光规则自定义(时间阈值和宽高阈值)、采样率定义等。
内容曝光框架基于页面事件代理及过滤的数据采集方案,对业务层无痕,从而对业务实现无侵入。