我阅读了很多关于编写可测试代码的原则的主题。我正在我的应用程序中使用依赖注入,我面临一个非常大的问题。 在顶部ViewController中,我正在加载一个对象数组,用户可以选择它们在层次结构中更深入。问题是我需要一些控制器中的选定对象(包括叶子控制器)以及一些我不需要的对象。
在图片中,它可以是这样的:
NeedObject -> don't need -> don't need -> need
TopController -> otherController1 -> otherController2 -> leafController
现在,我正在通过所有层次结构传递所选对象,但我可以感觉它是多么糟糕,因为它不尊重说明对象应该只知道它需要什么的原则。但我无法弄清楚如何尊重这一原则。
请注意,这些对象都是ManagedObject
的子项,并且存储在CoreData中。
我想在类定义中添加类似布尔值isSelected
,然后使用一个对CoreData
请求selected = YES
的对象,但我不确定它是“对象的可选择性“不应该是持久性的,对吗?
感谢您的帮助
答案 0 :(得分:2)
我认为你所做的事情已经很好了。
正如您所描述的那样,otherController1和otherController2'需要'对用户所选对象的引用,以便将该引用传递给较低级别的控制器。
答案 1 :(得分:1)
在层次结构中传递信息是进行依赖注入的方法,即使某些中间层除了进一步传递之外没有使用该信息。
这比在层次结构中具有深层对象"回到"到顶级对象请求信息。较低级别的对象应该对较高级别的对象知之甚少,这使您可以最大程度地灵活地进化层次结构。
Apple建议定义一种以这种方式传递依赖注入数据的协议,这进一步隔离了类之间的依赖关系。