安卓架构从mvc到mvp再到mvvm

来源:互联网 发布:四个字的网络歌手名字 编辑:程序博客网 时间:2024/05/22 17:28

安卓架构从mvc到mvp再到mvvm

参考:

http://www.ruanyifeng.com/blog/2015/02/mvcmvp_mvvm.html

https://zhuanlan.zhihu.com/p/25272412

https://www.tianmaying.com/tutorial/AndroidMVC

 

mvc:

各部分意义:

 

模型层(Model):

我们针对业务模型,建立的数据结构和相关的类,就可以理解为AndroidApp的Model,Model是与View无关,而与业务相关的。对数据库的操作、对网络等的操作都应该在Model里面处理,当然对业务计算等操作也是必须放在的该层的。

视图层(View):

一般采用XML文件进行界面的描述,这些XML可以理解为AndroidApp的View。使用的时候可以非常方便的引入。同时便于后期界面的修改。逻辑中与界面对应的id不变化则代码不用修改,大大增强了代码的可维护性。

控制层(Controller):

Android的控制层的重任通常落在了众多的Activity的肩上。这句话也就暗含了不要在Activity中写代码,要通过Activity交割Model业务逻辑层处理,这样做的另外一个原因是Android中的Actiivity的响应时间是5s,如果耗时的操作放在这里,程序就很容易被回收掉。

mvc是Android最基础的开发模型。比较好上手。

mvp:

因为对于mvc开发来说,因为Activity本身需要担负与用户之间的操作交互,界面的展示,不是单纯的Controller或View,所以activity显得很重。为此我们这里需要用到mvp。

MVP 隔离了MVC中的 M 与 V 的直接联系后,靠Presenter 来中转。

 

各部分意义:

数据层(Model):

负责处理应用的数据部分。

(ApiHelper, PreferenceHelper, DatabaseHelper 和 FileHelper。这些都是用来帮助实现用来连接各种 model DataManager的。)

视图层(View):

负责将带有数据的视图显示在屏幕上。

ActivityFragment自定义视图是应用的 View 部分。)

交互层(Presenter):

连接 Model 和 View 的桥梁,它也负责操控 View。(它是决定 View 行为的纯 Java 类(不访问任何 Android API))

 

根据图例所示规则:

1.     View 的唯一职责就是根据Presenter 的指示绘制 UI。它在这个程序里应该是“哑”的。

2.     View 将所有的用户交互委派给它的Presenter。

3.     View 永远不与 Model 直接交互。

4.     Presenter 负责接受 View 对 Model 的请求,并且在特定的情况下控制 View。

5.     Model 负责从服务器、数据库和文件系统获取数据。

进阶规则:

1.     每一个 View 都有一个单独的 Presenter。

2.     View 通过一个接口与Presenter 通信,反之亦然。

3.     Presenter 通过接口和DataManager 交互。

4.     DataManager 只在被调用的时候提供服务。

 

代码示例:

需求:这里通过id去加载对应的数据显示用户的姓名。

 

UML图如上:

我们操作的数据为UserBean。

M层对应的接口为IUserModel,这里要实现设置数据setXXX的方法和加载数据load的方法。它的实现类为UserModel,用于具体实现方法(相当于对UserBean的数据实际操作的DataManager)。

V层对应的接口为IUserView,这里对View的操作只要从编辑id的EditText中获取id,获取数据之后放入姓、名中。它的实现是MainActivity。这里的MainActivity比较特殊,它属于V层,但他持有presenter,并利用presenter进行操作。毕竟安卓是以Activity为操作框架的。

P层对应的是UserPresenter,里面是对V层的操作对象和M层的操作对象进行对应的操作。基本上处理数据和操作View填充都在这里。


bean数据:

model接口


model实现类:

View接口:


view的实现类:

presenter:


mvvm:

mvp在使用过程中,需要建立很多接口对象和他的实现类,这样的代码结构就显得很臃肿,不够优雅,对此有了mvvm。在 MVVM 中就出现的 Data Binding 这个概念,意思就是 View 接口的 showData 这些实现方法可以不写了,通过 Binding 来实现。

各模块意义:

数据对象(Model):同时,提供本应用外部对应用程序数据的操作的接口,也可能在数据变化时发出变更通知。Model不依赖于View的实现,只要外部程序调用Model的接口就能够实现对数据的增删改查。

UI层(View):提供对最终用户的交互操作功能,包括UI展现代码及一些相关的界面逻辑代码。

 

在mvvm框架中,Databinding结构的存在基本上通过框架的形式实现了mvp中的p层的数据和View绑定操作的过程。而有一些小的操作还是会有点像mvc的c层在Activity中处理。细看的话mvvm只是mvp和mvc和改进版本。讲道理的话mvvm感觉应该是mvcvm。

在这里mvc、mvp、mvvm中虽然都是model和view但是这view的范围是不一样的。mvc和mvvm中的view指的就是xml的ui。而mvp的view范围则会大一些,上面例子是整个MainActivity

原创粉丝点击