[源码]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
    评论
对于项目码及讲解,以下是一个300字的回答: c 项目码及讲解是指关于一个使用 C 语言开发的项目的代码和相关说明的内容。C 语言是一种广泛应用于系统软件和应用软件开发的高级编程语言,具有高效、灵活和可移植的特点,因此在各个领域中都有许多使用 C 语言开发的项目。 项目码是指项目的具体代码实现,通过查看码我们可以了解项目的核心逻辑、功能实现方式以及代码结构。项目讲解则是对码进行解读和解释,帮助我们理解项目的设计思路和实现方法。 通过项目码及讲解,我们可以学习到项目的开发技巧和经验,了解软件工程的实际应用,提升自己的编程能力。在讲解过程中,讲师会逐行解释代码的作用和意义,讲解各个函数和模块的功能,以及项目中的关键算法和数据结构的运用,帮助学习者更好地理解和掌握项目的内容。 此外,项目码及讲解还能帮助我们了解开项目的发展和贡献方式,开软件是指代码公开并允许其他人对其进行使用、修改和分发的软件。通过研究开项目的码和讲解,我们能够参与到项目的开发中,为项目的贡献做出自己的努力。 总而言之,c 项目码及讲解对于学习和理解 C 语言开发项目以及参与开项目的开发都具有重要意义,可以提高我们的编程技能和项目开发经验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值