mvvm
历史条件
1 各种标记语言xml,xaml,html描述UI
2 databinding
3 mvp,v太轻、p太重,v、p通信略麻烦
mvvm: what how why
mvvm即Model、View、ViewModel(本文简称vm)。
databinding:Databinding connects UI and Data Models
why databinding?
verbose: the old way
1 | <LinearLayout …> |
1 | private TextView name |
just soso: Libraries like Butterknife can improve it
1 | @Bind(R.id.name) TextView name |
elegant: databinding
1 | <layout> |
1 | private ActivityMainBinding binding; |
代码生成和表达式解析都在编译时,代码错误编译器及时报错、没有反射和运行时负担。
优点
1 可测试。
2 简化逻辑。
3 引入vm中间层,解耦view与model。
4 view逻辑简单,容易调试和做单元测试。
5 强大灵活的databinding做了大量脏话,我们自己写的代码减少。而,代码少≈逻辑简单+bug机会少≈容易维护。
6 没有空指针问题、不需要反射。
vm = POJO + view logic
转变编码方式
功能实现驱动到测试、架构驱动:作为一个高级敲字员,仅仅实现产品需求是不够的。在实现功能的同时要考虑到整个模块的架构、测试、维护,我们要站在更高的抽象上去解决现实的问题。
虽然大杂烩式的程序也可以用来发展长生命周期的应用程序,但是相较于 MVC,大杂烩式的程序在可扩充性和可维护性 (尤其是可测试性) 上会远比 MVC 复杂很多,相反的,MVC 模式的应用程序是在初始开发时期必须先思考并使用软件架构,使得开发时期会需要花较多心力,但是一旦应用程序完成后,可扩充性、可维护性和可测试性反而会因为 MVC 的特性而变得容易。
performance
1 The compiler needs to traverse the views once - no findViewById needed
2 Expressions are cached.
3 UI updates are batched together.Bindings can be updated on ANY thread.
Databinding Summary
1 Eliminates SO MUCH boilerplate
2 Is in support library
3 Compile-time validation
4 Performance is fantastic
5 Don’t need to update views on UI thread
6 Models are the Single Source Of Truth