[源码]RoboBinding及思考

RoboBinding是个有年头的MVVM框架,想看他源码好像也有段时间了,终于下定决心看一下了。

看个大概

主要是想了解一下作者的实现思路,鉴于代码实在是太松耦合、类实在太多,也没动力看细节了。

思路

表示,整个框架解耦太厉害了,出现了无数单实现的interface,也就是说,整个框架都是靠着interface联系在一起的。可能这类猿才会做出MVVM+自动化测试的框架吧。
编译时把PresentationModel的信息搞出来,并且生成一个对应的描述类,供运行时使用。
运行时流程:
- 给LayoutInflater设置Factory和Factory2回调,hook View的创建
- 根据PresentationModel创建绑定的BindContext,里面有绑定的信息
- 对于每一个数据绑定,都有一个Command与之对应,被观察者有变化的时候,会执行Command的call函数
- PresentationModel的变化监听是靠AspectJ或者直接调用firePropertyChange实现的

合理设计

  • 提供快捷调用接口——Binders
  • 用定制化的Exception做预校验,所有异常都抛出,不做if-return判断——Preconditions
  • 解耦是双刃剑,要适度啊。要不然逻辑满天都是,更难看懂
  • Factory是不能够拿到Inflate之后的View对象的,涉及到了一个源码的功能:
    LayoutInflater的inflate都是由factory实现的,会有一个default的Factory放在mPrivateFactory,需要反射出来作为delegate来获取View

思考

这个是个高端实现,用到了编译时的Annotation处理(最近看的和写的几个框架都用到了这个),减少了反射、代码也更优雅。让我想起来ORMLite,那其实还有个GreenDAO的实现思路(非常喜欢greenrobot的调性,变通一下,世界就清净了)。
MVVM核心就是绑定对象的Field和View的某个属性(当然是靠setter方法),如果VM本身是预定义好的,那么必须使用RoboBinding的思路来搞,但是,如果VM是生成的呢?
如果把MVVM交给greenrobot来做,那么,VM一定是生成的,VM实现Observable。而绑定的功能仅仅是靠Factory注册一个Observer,Observer进行View的修改。
这个方法只完成了Field的绑定,对于事件的绑定,似乎没有什么特别友好的方式。除非是用上clean-architecture的思路,把Presenter/VM中的处理逻辑都封装成原子Command,VM靠Command来实现逻辑。或者是用ButterKnife的方式,Annotation+反射,而这时,就要用比较复杂的逻辑把生成的代码和手写的代码粘合到一起了(用EventHandler)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值