具有业务和数据层的Swift MVVM示例
我遇到的大部分Swift MVVM示例都使用dependency injection将Model注入ViewModel,然后将ViewModel注入到ViewController中。 这个注入通常build议在AppDelegate中作为一个单例来处理。 这简单的例子都很好。
然而,在现实世界中,“模型”实际上不仅仅是一个DTO对象,它假定返回模型/ DTO的业务和数据层。 因此,将模型注入AppDelegate级别的ViewModel是不现实的,因为View / ViewController将触发实际的数据刷新。 所以模型注射需要在别处发生。
此外,大多数示例直接从ViewModel到DataAccess,这会导致ViewModel获取大量的业务逻辑,理想情况下它应该保持视图的状态。
有人可以转发一个全面的端到端的Swift MVVM示例与离散分离的业务和数据层。 为了保持这个问题不是基于意见,而是问题/答案的格式,这个例子应该有:
- 独立的业务逻辑层
- 独立的数据访问逻辑层
- 单独的模型/ DTO(仅状态对象)
这个例子还应该清楚地说明:
- dependency injection发生的地方
- 在上面定义的层之间有明确的调用层次结构
视图模型应该是协议。 协议在Swift中非常强大,它们尽可能的保持组件的解耦。 这也有利于testing。 这是一个简单的例子:
// 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 } }
模型和其他组件(networking,JSONparsing,视图控制器,集合视图单元格等)之间的所有其他交互可以以类似的方式进行。 基本上,其他组件将只处理ArticleDisplayable对象,不会耦合到任何模型。