前言
去年5月左右的时候,笔者在逛GitHub的时候,看到了一个MVP的项目,叫做mosby,仔细看了源码和作者介绍的文章后,发现确实有点意思,虽然会需要多写几个类和方法,但是解决了activity/fragment过重的问题,通过V/P分离能够帮助提高可维护性。时至去年年底,今年年初,MVP才逐渐被大家所知,也不时看到些文章介绍其概念和实践。
再说说MVVM (Model-View-ViewModel),在Android上对应data binding。即ViewModel到View的映射,不需要再去自己找到view,然后更新字段,而是在映射建立后直接更新ViewModel然后反映到View上。
值得一提的是,MVP和MVVM都是微软提出的理念,最早都是在WPF里面被应用的,只是时至今日才在Android上被真正用起来。本文不是来介绍这两个的,所以不再赘述,讲讲正题。
在本系列首篇中我曾经提到过在我设计的新应用中,采用了MVP+MVVM的混合(当初也考虑过Flux,但感觉并不合适Android),后来有一次CJJ同学和我探讨这个架构的时候,问到了我有没有什么正式的名字,我就有楞,因为这个组合和应用是我自己设计的,所以还真没想过这个问题,Google一搜,还真有这么个东西(见参考资料,文章写得很棒,建议英文不错的同学读一读)!
这就是本文我要介绍的东西,MVPVM (Model-View-Presenter-ViewModel)。
Quick glance
以下所有Model,并不单单指的是Bean,而是Model层,更像是repository或者business logic。
MVC: View持有Controller,传递事件给Controller,Controller由此去触发Model层事件,Model更新完数据(如从网络或者数据库获得数据后)触发View的更新事件。