ios - 具有业务和数据层的 Swift MVVM 示例

标签 ios swift mvvm business-logic data-access

我遇到的大多数 Swift MVVM 示例都使用依赖注入(inject)将模型注入(inject) ViewModel,然后将 ViewModel 注入(inject) ViewController。通常建议在 AppDelegate 中将此注入(inject)作为其单例进行处理。这对于简单的例子来说都很好。

然而在现实世界中,“模型”实际上不仅仅是一个 DTO 对象,它假定返回模型/DTO 的业务和数据层。因此,将模型注入(inject) AppDelegate 级别的 ViewModel 是不现实的,因为 View/ViewController 将触发实际的数据刷新。因此模型注入(inject)需要在其他地方进行。

此外,大多数示例直接从 ViewModel 转到 DataAccess,这导致 ViewModel 吸收了大量业务逻辑,而理想情况下它应该只保存 View 的状态。

有人可以转发一个全面的端到端 Swift MVVM 示例,该示例具有离散分离的业务层和数据层。为了让这个问题不是基于意见而是以问题/答案的形式出现,这个例子应该有:

  • 独立的业务逻辑层
  • 独立的数据访问逻辑层
  • 分离模型/DTO(仅状态对象)

例子也应该说明清楚:

  • 依赖注入(inject)发生的地方
  • 有明确定义的调用 上述定义层之间的层次结构

最佳答案

View 模型应该是协议(protocol)。协议(protocol)在 Swift 中非常强大,它们使组件尽可能地解耦。这也有利于测试。这是一个简单的例子:

// the view model
protocol ArticleDisplayable {
    func getTitle() -> String
}

// A model
struct News: ArticleDisplayable {
    let newsTitle: String

    func getTitle() -> String {
        return newsTitle
    }
}

// Another model
struct BlogPost: ArticleDisplayable {
    let postTitle: String

    func getTitle() -> String {
        return postTitle
    }
}

您可以以类似的方式处理模型和其他组件(网络、JSON 解析、 View Controller 、 Collection View 单元等)之间的所有其他交互。基本上,其他组件只会处理 ArticleDisplayable 对象,不会耦合到任何模型。

关于ios - 具有业务和数据层的 Swift MVVM 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42015020/

相关文章:

ios - Objective C,在堆栈跟踪中不涉及我的应用程序时处理崩溃报告

ios - 自定义 UILabel 在 Interface Builder 中显示不正确

c# - 如何在 XAML 中访问我的 ViewModel 的 DependencyProperties?

c# - 根据 ViewModel 属性更改画笔

ios - 当我在 DateFormat 上设置 `HH:mm:ss` 时,在极少数情况下我会得到 `22:42:31 AM`。 ` AM` 是意外的。我该如何解决?

iphone - 我们可以使用 iOS 从我的应用程序更改 Facebook 帐户的封面图片吗?

javascript - iOS TextInput 高度相对于字体大小 react-native

ios - 检查 UIImageView 是否有动画

ios - 快捷按钮概述

wpf - WPF-如何获取按钮的IsFocused或GotFocus/LostFocus来触发按钮模板中元素的动画的开/关