Swift MVVM示例与Business&数据层

时间:2017-02-03 00:53:38

标签: ios swift mvvm business-logic data-access

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

然而在现实世界中,"模型"实际上,它不仅仅是一个DTO对象,它还假设了Business&返回模型/ DTO的数据层。因此,将模型注入AppDelegate级别的ViewModel是不现实的,因为View / ViewController将触发实际的数据刷新。所以模型注入需要在其他地方进行。

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

有人可以推出一个全面的端到端Swift MVVM示例,其中包含离散分离的Business&数据层。为了保持这个问题不是基于意见而是问题/答案格式,这个例子应该有:

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

这个例子也应该清楚地说明:

  • 发生依赖注入的地方
  • 明确定义了电话 上面定义的图层之间的层次结构

1 个答案:

答案 0 :(得分:0)

视图模型应该是协议。协议在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解析,视图控制器,集合视图单元等)之间的所有其他交互类似的方式继续。基本上,其他组件只会处理ArticleDisplayable对象,并且不会与任何模型耦合。