【问题标题】:implementation of mvvm architecture in objective-c在 Objective-C 中实现 mvvm 架构
【发布时间】:2018-03-28 18:04:08
【问题描述】:

如何在objective-c中实现mvvm架构?我需要示例项目来学习 mvvm 架构,还需要知道在模型、视图、视图模型中需要提供什么以及如何在 Objective-c 中进行分离?普通项目和mvvm项目有什么区别?

【问题讨论】:

  • 请求一个库,教程在这里不是一个有效的话题。如果您需要示例项目,请为您自己寻找在线教程。
  • 正如@ElTomato 所说,这不是这里的有效主题。因为我一直在寻找相同的东西并发现了一些有趣的东西,所以我在这里分享它:github.com/colatusso/SimpleMVVM

标签: ios objective-c


【解决方案1】:

Jesto,我可以简要地向您详细说明您的要求。即使是解释,您也可以轻松理解我在此处发布的内容,因为它有带有示例的源代码,您可以直接尝试源代码。

First the Model

模型层并不像看起来那样一目了然。

如您所料,它可能包含您的模型对象 覆盖大部分层表面。在门票示例中,您将 有一个将存在于您的模型中的 Ticket 结构。

我发现以下组件也是模型层的一部分:

网络代码。形状应该是这样的。理想情况下,您只使用一个类进行跨您的网络通信 整个应用程序。 持久性代码。您可以使用 Core Data 或简单地将 NSData blob 直接保存到磁盘来实现这一点。 解析代码。任何解析网络响应等的对象也应该包含在模型层中。

虽然模型对象和解析器是特定领域的,但 网络代码将是高度可重用的。

然后控制器将使用模型层中的所有元素 定义应用中的信息流。

Second the View

当用户与您的应用交互时,他们正在与 视图层。视图被认为是应用程序的“愚蠢”部分,因为 它不应该包含任何业务逻辑。在代码方面,你会 一般见:

UIView 子类。这些范围从基本的 UIView 到复杂的自定义 UI 控件。 一个 UIViewController(可以说)。由于 UIViewController 与其自己的根 UIView 及其不同的周期强耦合 (loadView, viewDidLoad),我个人认为是其中的一部分 层,但并非所有人都同意。 动画和 UIViewController 转换。 属于 UIKit/AppKit、Core Animation 和 Core Graphics 的类。

在这一层中发现的典型代码异味以不同的方式表现出来, 但归结为在您的视图中包含与 UI 无关的任何内容 层。典型的代码异味是从 UIViewController。

在你的 UIViewController 中放入一堆代码并成为 完成它,这样你就可以在最后期限之前完成。不要这样做!简而言之 期限,您可能会节省几分钟,但从长远来看,您 可能会浪费数小时寻找错误,或者在您想要的时候遇到麻烦 在另一个视图控制器中重用代码。

Third MVVM

Model-View-ViewModel 或 MVVM 是 MVC 派生的。从概念上讲, 很相似。最大的不同在于之间的沟通 层,而不是控制器,而是使用视图模型。

在实践中,当 MVVM 有一个 FRP 框架来支持它时,它就会大放异彩。 由于模型现在由视图模型和视图模型观察 这种观点认为,FRP 范式成为管理 信息流。这导致层之间更好的分离, 这转化为易于测试的解耦组件。

底线:架构很重要,但我认为正确 编程范式将更多地影响您的整体质量 代码。同样重要的是要注意,大多数情况下不是,你会 在同一个应用程序中有不同的方法。这包括两者 架构和范式。你可能认为这会扰乱 代码库内部的一致性,但您应该始终使用正确的 工作的工具。

Finally MVC

模型-视图-控制器 (MVC) 设计模式将对象分配到一个 应用程序的三个角色之一:模型、视图或控制器。这 模式不仅定义了对象在应用程序中扮演的角色,它 定义对象相互通信的方式。三者中的每一个 对象的类型通过抽象边界与其他对象分开 并通过这些对象与其他类型的对象进行通信 边界。一个特定 MVC 类型的对象的集合 应用程序有时被称为层——例如,模型 层。

MVC 是 Cocoa 应用程序良好设计的核心。好处 采用这种模式的人很多。这些对象中有很多 应用程序往往更具可重用性,并且它们的接口往往是 更好的定义。具有 MVC 设计的应用程序也更容易 比其他应用程序可扩展。此外,许多 Cocoa 技术 和架构基于 MVC 并要求您的自定义 对象扮演 MVC 角色之一。

Difference between Normal and MVVM

模型 — 负责域数据或数据访问层 操纵数据,想想“Person”或“PersonDataProvider” 类。

视图 — 负责表示层 (GUI),对于 iOS 环境,请考虑以“UI”前缀开头的所有内容。

Controller/Presenter/ViewModel — 模型和视图之间的粘合剂或中介,通常负责改变模型 通过对用户在视图上执行的操作做出反应并更新 具有模型更改的视图。

MVVM Says

最新和最伟大的 MV(X) 类型 MVVM 是最新的 因此,MV(X)类型的,让我们希望它在考虑到问题的情况下出现 MV(X) 先前面对。理论上模型-视图-视图模型看起来 很好。 View 和 Model 我们已经很熟悉了, 中介者,表示为视图模型。 MVVM 非常相似 给MVP: MVVM 将视图控制器视为视图 View 和 Model 之间没有紧密耦合。另外,它像 MVP 的 Supervising 版本一样进行绑定; 然而,这一次不是在 View 和 Model 之间,而是在 视图和视图模型。那么 iOS 现实中的 View Model 是什么? 它基本上是您的 View 的 UIKit 独立表示及其 状态。 View Model 调用 Model 中的更改并自行更新 使用更新的模型,并且因为我们在视图之间有一个绑定 和视图模型,第一个相应地更新。

还有the MVVM Design PatternHow does MVVM work?

【讨论】:

    【解决方案2】:

    看看这个话题 -> What is the difference between MVC and MVVM?

    Model-View-ViewModel 基本示例在这里 -> https://github.com/futurice/mvvm-example-objc 可能下一步,您可以使用反应可可,因为它可以与 mvvm 更有效 -> https://github.com/ReactiveCocoa/ReactiveViewModel

    活性可可 -> https://github.com/ReactiveCocoa/ReactiveCocoa

    祝你好运:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-10
      • 2014-10-12
      • 2020-07-26
      • 2021-12-18
      • 2017-02-12
      • 2019-10-20
      • 1970-01-01
      相关资源
      最近更新 更多