欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android设计模式理解(mvc mvp mvvm)

程序员文章站 2023-01-29 21:16:07
android设计模式理解(m mvp mvvm)。 mvc: modle-view-controller 把一个个应用的输入,处理,输出流程按照 modle,view,c...

android设计模式理解(m mvp mvvm)。

mvc:

modle-view-controller 把一个个应用的输入,处理,输出流程按照 modle,view,controller进行分离

modle:模型层 就是应用程序中的二进制数据

view:视图层 就是应用程序的界面 android中的界面采用xml文件保存的,界面开发变得很方便

controller:控制层 控制视图模型的数据显示

存在问题:controller (例如activity)中存在两部分内容:

业务相关+界面相关

这样就造成v层的代码相对较少,c中代码相对较多

解决方案:

1.将activity中的业务相关内容拆分:mvp

2.将activity中界面相关的内容拆分:mvvm

mvp:

model-view-presenter

拆分业务相关部分 要目的是划分模块职责,降低模块耦合,易测试,提高代码复用

presenter: 作为model和view的中间协调部分,负责两者之间的业务逻辑处理

view会抽象出来一系列操作ui的接口(model层也可以),presenter拿到的都是其他两个层级的接口来做业务逻辑的处理.这样不仅可以使view和model之间的耦合度降低,还可以更易得进行单元测试.

mvp的优缺点

优点:降低耦合,层级职责更明显,易于单元测试

缺点:造成类数量爆炸,代码复杂度和学习成本高,在某些场景下presenter的复用会产生接口冗余

mvvm:

拆分界面相关部分

一种在windows上已经使用多年的开发模式-model-view-viewmodel (mvvm)。

将view和一个对象的对field绑定。当field更新的时候,framework将收到通知,同时view也会自动更新。

mvvm模式包含了三个部分:

model – 代表你的基本业务逻辑

view – 显示内容

viewmodel – 将前面两者联系在一起的对象

一个viewmodel接口提供了两个东西:动作和数据。动作改变model的下层(click listener,监听文字改变的listener等等),而数据则是model的内容。

比如,为一个拍卖页面服务的viewmodel可能被作为数据呈现:item里的一张图片,标题,描述,价格。也可能作为动作呈现:投标,购买或者联系卖家。

在传统的安卓架构中,controller负责推送数据给view。在activity中findview,然后在它上面设置内容。在mvvm中,viewmodel在改变内容之后通知binding framework内容发生了改变。然后framework自动更新和那些内容绑定的view。这两个组建只是通过viewmodel松耦合在一起。

这种设计模式之所以牛逼,除了明显智能化了的view之外,还方便了测试。

比如,在一个测试用例中,我们不将vm和一个真实的view绑定,而是直接创建一个vm,给它一些数据,然后在上面调用操作,以确保数据的变化是正确的。比如刚刚的拍卖案例中,你可以创建一个带虚拟(模拟的)api服务的vm

,让它载入任意的item然后在上面调用拍卖的行为,以确认结果数据是正确的。所有这些工作都不必和一个具体的view交互。

而在测试view的时候,我们可以创建一系列带有预先设置好数据(比如依赖于网络调用的或者内容的)的模拟model,然后观察在不同的数据集合面前view是如何表现的。

但是由于框架的侵入性太强,导致一直没有流行起来。