MVVM 基础

MVC 设计模式

日常大家都会听到,名字很简单,但是很实用,日常 Android 工程开发基本都会用到,但是仔细了解下,其实也会有很相对于原来基本了解的扩充。MVC (Model–view–controller)架构将程序分为:

  • Model :程序定义的基础数据模型,和用户的界面显示部分相互独立
  • View:展示信息以及获取用户交互的输入,数据信息来源于 Model
  • Controller:Tie the Model to the View。连接 View 和 Model ,负责逻辑部分处理

MVC 架构将应用程序中的角色分为 M V C 三个部分,这样的橘色拆分定义了角色,同时也为模块之间划分了边界,各个模块通过边界定义的接口去进行通信,角色划分之后,模块之间的组合方的不同,也会有不同的 MVC 模式。

传统的 MVC 架构

图上的逻辑资料参考 Apple 官网 的文档

在上面的 MVC 架构中,基本的流程如下:

  • 用户操作界面,产生相应的交互事件,事件会传递到 Controller 中。
  • Controller 中根据事件的类型,决定是去更新 Model 还是改变 View 的i行为
  • Model 改变了已有回去将数据变化通知到 Observer 中。

自己在看 Apple 的官方文档时,有这样一段描述,文档中介绍 View 模块中,也是对 组合(Composite)模式的使用,确实:在 View 模块中,View 视图会相互嵌套组合,界面上展示的 View 基本都是由多个 View 组合而成。
而 Controller 中侧采用了策略模式,Controller 决定了 View 界面背后的执行的逻辑,View 只负责界面 UI 部分。。
而 Model 则是 观察者(Observer)模式,将数据的变化通知到对应的监听者上。
这种 设计模式
优点:

  • 一定程度上可以进行代码的复用,提高工程效率。
  • 以 MVC 的模块划分方式,将边界职责定义清楚,模块间低耦合,方便功能扩展。
  • 通用性好:Web、移动端、桌面端都可以使用。

缺点:
-实际开发时 Controller 逻辑一般会变得过重(有过相关开发的同学都会发现 Activity/Controller 中的逻辑部分代码很多),因此有了 Massive View Controller 之称,实际上。

  • Model 和 View 之间相互耦合,降低了代码的复用性,最好将两者独立。
Cocoa version of MVC

在这里插入图片描述
上图中新的 MVC 架构在交互上更加简洁。在上图中新的 MVC 架构中,Controller 新增加了作为作为中介者(Mediator),协调两个方向上的数据,而 View 则增加了 Command 模式用于实现 IOS 上的 target-action 机制。

MVC 设计模式的几个指导原则
  • 将 MVC 三个角色的代码不要写在一个类中,实现角色实现代码的分离
  • 尽可能的复用 Model 和 View 代码。
  • View 不要直接去监听 Model 数据的变化,通过 Controller 中介控制器去中转。
  • View Class 中的代码不应该依赖具体的 Model Class 和 Controller。
  • Model Class 不应该依赖除了 Model Class 以外的任何类。
MVVM 设计模式
IOS 上的应用

MVVM 基于 上面新的 Cocoa version MVC 架构的基础上,将数据表示部分的代码进行抽象,形成 ViewModel 部分,就可以得到下面的架构图。
在这里插入图片描述

图片来源 https://www.objc.io/issues/13-architecture/mvvm/

将 Model 的解析到 View 的映射逻辑放到 View Model 中,我们可以实现原本 View Controller 中代码的减少,同时,我们也可以不实例化 Controller 对 View Model 中的逻辑进行测,具体的 IOS 代码可以参考这篇文章。

https://objccn.io/issue-13-1/?spm=ata.21736010.0.0.71477536QNJw1y

鸿蒙上 MVVM

在鸿蒙上的 UI ,是使用 ViewModel 的方式控制页面数据渲染的,在鸿蒙官网有下面的图示来表示
https://docs.openharmony.cn/pages/v4.1/zh-cn/application-dev/quick-start/arkts-mvvm.md
在这里插入图片描述
鸿蒙的上的 UI 驱动需要更改数据 Model 的方式,具体可以查看鸿蒙官网的状态管理部分,该部分有很多对应的讲解。

Android Data binding

Android 中一直没有接触过 Data Binding,了解后发现也是对 MVVM 的实践,可参考下面 Android 部分的参考链接。

参考:

apple 官方 MVC 介绍 :
https://developer.apple.com/library/archive/documentation/General/Conceptual/CocoaEncyclopedia/Model-View-Controller/Model-View-Controller.html#//apple_ref/doc/uid/TP40010810-CH14-SW14

https://www.cnblogs.com/dxy1982/p/3793895.html?spm=ata.21736010.0.0.ca165ef36DPnBD
Android Data binding MVVM github 教程,
https://github.com/liangfeidotme/MasteringAndroidDataBinding?tab=readme-ov-file
MVVM ios 中的使用场景介绍:
https://objccn.io/issue-13-1/?spm=ata.21736010.0.0.71477536QNJw1y
Krush iOS Architecture
https://teehanlax.com/blog/krush-ios-architecture/
https://www.cnblogs.com/dxy1982/p/3793895.html?spm=ata.21736010.0.0.ca165ef36DPnBD

Android 知识库:
应用架构:
https://developer.android.com/topic/architecture?hl=zh-cn
Android Data binding:
https://developer.android.com/codelabs/android-databinding#0

android databinding 教程
https://developer.android.com/topic/libraries/data-binding/expressions?hl=zh-cn#java
设计模式 汇总篇:https://blog.csdn.net/ShuSheng0007/article/details/115980889

  • 24
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值