当使用“模型”控制器并使用依赖注入在VC之间传递它们时,如何处理某些控制器需要从另一个控制器获知信息的事实?依赖注入和模型控制器相互了解
这里的一个具体的例子,有具有3级模型的控制器虚构的应用:
- ContentStore:载荷并保持该应用程序的内容,特定用户登录
- 的UserManager。 :包含一个用户对象,并记录用户输入/输出,更新登录用户的信息等。
- NetworkController:了解Web服务的唯一控制器。
ContentStore和的UserManager将举行网络控制器的引用,来调用Web服务而不需要知道它们的实现(尊重的关注和单一职责原则的分离)。在AppDelegate中创建NetworkController,然后将它的参考ContentStore和的UserManager:
的AppDelegate - didFinishLaunchingWithOptions:
let networkController = NetworkController()
let contentStore = ContentStore(networkController: networkController)
let userManager = UserManager(networkController: networkController)
// Inject contentStore and userManager into the first VC
但是,让我们说ContentStore要加载特定用户定制的应用内容登录。它需要知道它的用户ID。并且网络控制器也需要知道用户ID以传入网络呼叫。
什么是一个干净的方式来实现这一点,控制器之间共享信息?从我能想出的不同方式来看,唯一看起来不算太糟糕的是:
所有ContentStore和NetworkController方法都有一个userId参数,并且它们本身从不会调用这些方法,它们总是被调用一个VC。该VC可以传递用户ID,因为它知道UserManager和ContentStore。
有没有比这个建议最干净的方法?
谢谢,我会读这个!我研究了主要的iOS架构模式,并决定坚持使用MVC模式,包括模型,视图,视图控制器和模型控制器。受Matteo Manferdini影响很大(例如http://matteomanferdini.com/how-ios-view-controllers-communicate-with-each-other/)。所以我现在坚持使用MVC,我只是想把它做好。仅供参考请遵守答案的第二部分,我使用一种协议来传递VC之间的依赖关系,如果目的地符合协议,那么VC就不会彼此了解。 – Kqtr