什么是MVP
作为码农你应该知道MVC(Model View Control)吧,如果不知道,请自行补脑。MVP(Model View Presenter)是MVC衍生而来的,MVP并不是一个新玩意,很早以前就由某软公司提出,近年来在Android应用开发中越来越多的被提及,越来越重要了。本文简单解介绍MVP的概念、为啥要使用MVP和在Android中如何使用,最后介绍一个Android使用MVP的例子。
概念
MVP,即 Model View Presenter,包含逻辑、视图、presenter(作为视图和逻辑的中间层,暂时找不到一个合适的词来翻译)三个部分。MVP要求显示层和逻辑层分离,View 发生变化时逻辑层(Model)不用改变。
为啥使用MVP
界面需求千变万化,而产品逻辑相对的稳定。这是Android甚至其它移动应用的基本现象,所以逻辑和视图的解藕变得很重要。之前有人问过我MVC在Android中的应用,Activity在是MVC中的哪一个?其实回答这个问题有些尴尬的地方,Activity在Android系统中本来是用来呈现界面的一个组件,而在Android应用开发中又无不兼负着界面跳转和数据访问的职责(很多数据访问逻辑的确是在Activity中发生的),Activity到底是View还是Control还是二者兼具?不好回答。而MVP却很好的解释Android视图和逻辑的解藕。
如何在Android中使用?
presenter
处于 View 和 Model 之间,控制View的行为同时调度业务逻辑层的行为。这样View和Model不用直接交互。在Android中我们可以建一个XxxPresenter类来负责这层。
View
毫无疑问,在Android中Activity是用来承载视图的,但是我们希望图的职责变得更加纯净,只负责显示视图,我们不希望Activity和model有直接的联系,我门可以定义一个View接口,在这个View中定义视图行为的抽象,让具体的Activity来实现,所以这个Activity要实现这个View,通常取名为XxxView。然后Presenter持有这个View的引用从而能调用View的行为。
Model
只负责应用的业务逻辑,例如数据请求或数据处理等,我们可以建一个XxxManager类来负责这层。
一个例子:MVP Demo
说了那么多,其实最重要的还是看Demo,不然都很虚,例子是学习新东西的最好方式。
例子源码地址:https://github.com/liuguangli/androidmvp
结尾
使用MVC模式来分离Android应用的界面和业务逻辑不是一件容易的事,MVP在Android应用解藕上却很容易解释。无论使用什么样的模式或方法构建应用,最终的目的都是为了提高代码的可读性、可维护性,冗长难懂的代码可能会让计算机编译执行多耗几毫秒,但是最要命的是解决一个小bug却花上几个小时甚至几天去理清代码来解决。作为开发者我门大部分时间还是耗费在调试、找bug上,而不是编码,至于代码设计,值得花时间去思考。