SwiftUI必须收藏之iOS和macOS的MVVM

SwiftUI内功之iOS和macOS的MVVM

自从SwiftUI引入以来,MVVM模式已经有了新的复兴。许多开发人员认为,这种特定模式非常适合SwiftUI数据流。

MVVM当然有一些好主意,但是它也带来了由于对模式及其刚性的各种不一致的解释而引起的问题。

在本文中,我们将了解MVVM如何适合使用SwiftUI编写的iOS应用程序,如何利用其优势以及如何避免其问题。

一、MVVM如何改善iOS应用程序的结构

MVVM是一种架构模式,可帮助您构建iOS应用程序。尽管它是MVC的派生,但它体现了一些独特的想法,这些想法与SwiftUI应用程序的工作方式非常吻合。

(一) MVVM模式的结构及其各层的作用

MVVM是MVC模式的变体。与MVC一样,Model-View-ViewModel模式(简称MVVM)是一种体系结构模式,指导您如何在iOS应用程序中构建代码。MVVM由三层组成,并以此命名。

image.png

每层在应用程序的结构中都有明确定义的角色,有助于您将关注点进行分离。

  • 在模型层中,我们找到了代表您应用程序数据及其域业务逻辑的Swift类型。
  • 该视图层是用户看到屏幕上的内容。在iOS中,它包含您的应用程序的SwiftUI视图,该视图显示信息并允许用户交互。
  • 最后,视图模型将视图连接到应用程序的模型。视图模型包含视图的当前状态,链接到应用程序体系结构的其他部分(例如,数据存储或网络),并处理用户的交互。

MVVM模式并非iOS独有。实际上,它是由Microsoft架构师(所有人)发明的。在首款iPhone发行仅数年后,它便进入了iOS应用程序。

传统上,Apple遵循macOS和iOS应用程序的MVC模式。随着SwiftUI的引入,情况发生了变化。

(二) MVVM使用活页夹来连接视图和视图模型

从MVC模式图来看,实际上,MVVM是相同的模式并不是重新发明的概念。因此,尽管我同时使用两种模式的思想,但我通常以MVC来谈论架构。

与MVC最为关键的区别是MVVM使用绑定器连接视图和视图模型层。这将在两层之间同步数据,从而删除样板代码。

这是SwiftUI的自然部分。

在UIKit中,开发人员使用了RxSwift之类的FRP框架。相反,SwiftUI在后台使用Apple的本机反应框架Combine。但是您无需学习Combine即可制作SwiftUI应用。

因此,在SwiftUI中,MVVM和MVC之间最明显的区别已经消失了。连接对象和视图只有一种方法:

  • 对象必须符合 ObservableObject协议。
  • 这样的对象必须使用@Published属性包装器公开任何影响用户界面的 属性。
  • 视图通过@ StateObject, @ObservedObject和 @EnvironmentObjects属性包装器连接到观察到的对象 。

(三)MVVM与MVC:本地视图模型和全局控制器

你可能感兴趣的:(SwiftUI必须收藏之iOS和macOS的MVVM)