设计模式使您的应用程序代码更具模块化,并且在错误修复和更改时更加宽容。 在本文中,您将学习MVC(模型-视图-控制器)和MVVM(模型-视图-视图模型)设计模式。

尽管设计模式(也称为架构模式)是可伸缩Cocoa Touch应用程序开发的关键,但围绕哪种架构模式实际上最适合在您的应用程序中存在很多争议。

在应用程序中,某些[体系结构模式]的对象的集合有时被称为一层,例如模型层。 - 苹果

事不宜迟,让我们看一下可以在下一个应用程序中使用的一些设计模式。

MVC(模型-视图-控制器)

这是Cocoa Touch开发中最常用的模式,也是我个人最喜欢的模式。 这种设计模式有效地将您的代码分为三类(或层):模型,视图和控制器。

它如何运作?为什么要使用它?

使用这种设计模式,您可以在不影响模式其他层的情况下对一层进行更改。 例如,如果您需要更改数据库,则只需删除模型并替换它,而无需编辑视图或控制器。 或者,如果您想更改视图的外观,则不必担心搞乱数据库代码。 这称为“关注点分离”,它使您的代码更易于调试,维护和重用。

另外,这是Apple自己推荐的设计模式,并且是iOS开发社区中的一种规范。 如果您刚刚起步,我强烈建议您坚持这种模式。 您可以在以后的可可开发生涯中尝试不同的设计模式。

层次与责任

让我们仔细研究此模式中的不同层以及每个层负责什么。 这是各层之间相互作用的快速示意图:

可可的设计模式:MVC和MVVM

MVC设计模式将代码的每个部分分为三个部分之一:模型,视图和控制器。

  • 模型:此层负责数据及其在应用程序中显示的形式。 控制器层可以通过通知模型来更改应用程序数据。 该模型负责其他任何事情,包括如何向用户显示数据或使用数据的人或对象。
  • 视图:视图负责数据的表示形式- 负责用户如何查看数据并与之交互。 这可以包括可重用的单元格,表和其他用户界面元素,这些元素对数据及其处理方式一无所知。 数据由控制器提供给视图元素。
  • 控制器:控制器是节目的明星。 它从模型中获取数据,然后将其传递给视图以显示给用户。 这是Model和View之间的唯一层,这可能会引起一些问题,我们将在本文后面进行研究。 该Controller通常在ViewController.swift中实现,   并且负责听取输入并根据需要更改模型。

要记住的一件事是,您不应将过多的职责塞满这些层中的任何一层,因为那样做会破坏具有设计模式的目的!

另外,如果不保持各层之间的连接干净整洁,那么即使使用MVC设计模式,您最终也会得到一个混乱且无法维护的应用程序! 特别是,请确保不要让视图和模型直接通信。 这些交互必须仅通过控制器进行。

MVVM(模型-视图-视图模型)

尽管“模型-视图-控制器”设计模式非常普遍,并且在大多数情况下都可以使用,但它也有其自身的挑战和弊端。 因此,我们有了另一个称为MVVM的设计模式,该模式代表Model-View-ViewModel。

MVC很棒,为什么我需要MVVM?

好吧,您应该意识到一个主要问题。 正如您在上一节中看到的那样,Controller层是View和Model之间的唯一层,因此人们滥用这一层并很快给它做太多事情也就不足为奇了。 这似乎是当时最容易做的事情,因为它避免更改其他层,但最终会导致Controller膨胀以及难以维护的代码。

这导致MVC在某些圈子中被异想天开的昵称“ Massive-View-Controller”。

MVVM体系结构模式是由Cocoa开发人员从Microsoft借来的,可以帮助解决大规模视图控制器的问题。 尽管它在iOS开发中不如MVC常见,但正越来越多地用于弥补MVC的不足。

层次与责任

让我们看一下MVVM中的不同层及其职责。 (您可能应该注意,在Cocoa社区中,没有有关如何使用这些图层的任何正式指南。)

这是一张快速图,演示了此架构模式的各个层次以及它们之间的联系。

可可的设计模式:MVC和MVVM

如果您考虑一下,您将看到,即使视图和控制器在MVC设计模式中是单独的层,也是如此紧密地耦合在一起。 因此,在MVVM中,我们只需采用View和Controller并将它们组合为一层。

让我们将每一层与其在MVC模式中的对应层进行比较。

  • (视图)控制器:通常称为视图的这一层与控制器紧密连接。 如此之多,以至于它们甚至没有被分成不同的层! 查看 与Controller通信,但Controller与ViewModel和View通信。 视图和控制器执行与MVC中相同的任务,但不同之处在于,现在(通过MVC)分配给控制器的某些任务现在由中间层ViewModel处理,以防止滥用控制器。 视图仍然处理向用户显示的数据,并且控制器响应用户事件并与模式的其余各层通信。
  • ViewModel:该层实际上并不自身包含任何“视图”,而是处理显示视图背后的逻辑,通常称为表示逻辑。 这包括创建自定义格式并处理要显示的字符串,以及根据模型层中的数据实际处理要显示给用户的数字。
  • 模型:模型与MVC模式中的模型层没有太大不同。 正如我们之前看到的 如果数据从ViewModel层接收到更新,则处理数据并对其进行更改。 知道谁使用年代的数据,他们用它做什么,或者如何在用户看到的任何数据。

如您先前所见,您不应混用任何这些层的职责,因为这可能导致您的应用程序代码复杂度不断上升,从而使任何设计模式的使用都变得多余。

结论

我希望您喜欢了解有关iOS的这些基本设计模式的更多信息。 希望您对MVC和MVVM设计模式有更好的了解,并且有足够的信心在将来的应用程序中使用它们。

当然,您用于应用程序的架构模式完全取决于您,它取决于您要开发的应用程序的类型。 但是,如果您不熟悉iOS开发,我仍然强烈建议您坚持使用MVC设计模式,因为它仍然是Cocoa开发中最主流的。

翻译自: https://code.tutsplus.com/articles/cocoa-architectural-patterns-mvc-and-mvvm--cms-30265

相关文章:

  • 2021-05-26
  • 2022-12-23
  • 2021-05-01
  • 2021-10-04
  • 2022-12-23
  • 2022-01-13
猜你喜欢
  • 2021-05-06
  • 2021-08-06
  • 2022-01-27
  • 2021-07-03
  • 2022-12-23
  • 2021-05-19
  • 2018-07-08
相关资源
相似解决方案