MVC ( Model - View - Controller ) 是一种软件框架设计模式,其将业务逻辑,数据,界面显示分离的方式组织代码.彼此分离解耦,实现较好的维护性和可扩展性.其中,Model层负责处理数据和业务逻辑工作;View层负责界面的显示与更新的结果;而Controller则是两者的媒介或是桥梁,控制View层与Model层的通信来达到这两层的分离效果.
human - - > Controller ----> Model ----> View - - > human ( 其中 Controller <----> 数据库 (懒得做图 =.=))
Android中如何运用呢,相对应的角色应该怎么分配的?在Android中,Model层中适合做一些业务逻辑处理,多包括一些数据存取,网络请求,复杂算法和一些耗时任务操作等;Android中的Activity和xml布局可以视为View层;并且Activity也作为Controller的存在,Activity处理用户交互请求,实现View视图,发起Model层请求作业等.
具体实现,举个例子:你可以定义一系列Model层业务数据处理接口
Activity中通过Model对象直接调用其方法实现起Controller对Model层的控制作用,Model层调用View层接口实现其对View层的更新.这就是一种简单的MVC框架模式了.以后若是想更换网络请求框架或其他类似的更新扩展操作,就比较好维护.有较好的代码的可维护性与扩展性.
MVP ( Model - View - Presenter ) 请先正襟危坐仔细研读官方架构Android架构蓝图.
MVP将复杂任务划分为更小的任务, View层变得更加简单.数据业务逻辑与一些界面相关更新操作更加解耦分离开来,代码的灵活性提升.
1.data <----> presenter <----> view
2.data <----> presenter <----> view (其中不同data ----> 1.presenter)
基类
这两个Base基类分别是所有Presenter与View的基类.BaseView中的setPresenter方法作用是将presenter实例传入view中,调用时机是在presenter实现类的构造方法中.BasePresenter中的start方法作用是开始获取数据并调用view中方法刷新界面,其调用时机是在Fragment类的onResume方法中.但其并不是必须用到的.
契约类,统一管理所有view与presenter的方法接口,直接可以看到一个页面所有的交互功能接口,一目了然.
Activity于MVP中是一个全局的控制者,负责创建view( fragment )以及presenter实例,并将两者联系起来.
将fragment作为view层的实现类,让Activity作为全局控制者来创建对象,Activity还可以处理一些外层的比如toolbar等外层界面操作.其实这样两者更能各司其职,fragment对于适配也比较灵活.
presenter的构造方法将自身实例传入,如果需要界面做出相应的变化,直接通过view调用view层方法即可,而在view层中在setPresenter中得到presenter实例,调用presenter中方法处理model层的方法接口.model层的实现被赋予了数据获取的职责.在实例中,数据的获取,存储,数据状态变化都是model层的任务,presenter会根据调用该层的数据处理逻辑并在需要时将回调传入.这样model,presenter,view都只处理各自的任务.
代码的可维护性,可扩展性,定位问题的便捷度,易读性等,其实有很多都是优秀代码框架考虑的因素,没有绝对完美的框架结构,只有在不断学习审其优劣,并能真正将其运用到自己的代码结构里才算是能比较好的运用框架吧.
reference