沿层次结构传递数据

时间:2016-06-17 15:33:35

标签: ios objective-c core-data dependency-injection

我阅读了很多关于编写可测试代码的原则的主题。我正在我的应用程序中使用依赖注入,我面临一个非常大的问题。 在顶部ViewController中,我正在加载一个对象数组,用户可以选择它们在层次结构中更深入。问题是我需要一些控制器中的选定对象(包括叶子控制器)以及一些我不需要的对象。

在图片中,它可以是这样的:

NeedObject    ->    don't need    ->    don't need    ->     need
TopController -> otherController1 -> otherController2 -> leafController

现在,我正在通过所有层次结构传递所选对象,但我可以感觉它是多么糟糕,因为它不尊重说明对象应该只知道它需要什么的原则。但我无法弄清楚如何尊重这一原则。

请注意,这些对象都是ManagedObject的子项,并且存储在CoreData中。 我想在类定义中添加类似布尔值isSelected,然后使用一个对CoreData请求selected = YES的对象,但我不确定它是“对象的可选择性“不应该是持久性的,对吗?

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

我认为你所做的事情已经很好了。

正如您所描述的那样,otherController1和otherController2'需要'对用户所选对象的引用,以便将该引用传递给较低级别​​的控制器。

答案 1 :(得分:1)

在层次结构中传递信息是进行依赖注入的方法,即使某些中间层除了进一步传递之外没有使用该信息。

这比在层次结构中具有深层对象"回到"到顶级对象请求信息。较低级别的对象应该对较高级别的对象知之甚少,这使您可以最大程度地灵活地进化层次结构。

Apple建议定义一种以这种方式传递依赖注入数据的协议,这进一步隔离了类之间的依赖关系。