Objective c 支持/反对使用单例服务+通知而不是嵌套控制器的参数?

Objective c 支持/反对使用单例服务+通知而不是嵌套控制器的参数?,objective-c,cocoa-touch,cocoa,Objective C,Cocoa Touch,Cocoa,我一直在努力使用推荐的MVC方法构建更大的应用程序,而大多数苹果文档和各种教程似乎都支持这种方法。也就是说,每个嵌套控制器都有自己的视图,虽然我“明白了”,但我不一定喜欢它——在我的特定应用程序中,我有一个视图和控制器层次结构,现在有几个类。例如,主控制器/视图->侧栏->侧栏的上半部分NSView->NSTableView中的NSSplitView 我一直在玩在这个层次结构上下传递我需要的数据/对象的游戏,但它变得有点混乱,似乎在引导我走上一条我不太喜欢的紧密耦合的道路,在每个控制器的init

我一直在努力使用推荐的MVC方法构建更大的应用程序,而大多数苹果文档和各种教程似乎都支持这种方法。也就是说,每个嵌套控制器都有自己的视图,虽然我“明白了”,但我不一定喜欢它——在我的特定应用程序中,我有一个视图和控制器层次结构,现在有几个类。例如,主控制器/视图->侧栏->侧栏的上半部分NSView->NSTableView中的NSSplitView

我一直在玩在这个层次结构上下传递我需要的数据/对象的游戏,但它变得有点混乱,似乎在引导我走上一条我不太喜欢的紧密耦合的道路,在每个控制器的init方法中传递很多东西-例如一个数据模型

我还玩了一个朋友建议的想法,一个单身服务。本质上,它是控制器可能需要的任何数据模型或“东西”的包装器,在我的例子中,它是一个EKEventStore,用于显示NSArray属性并在主线程上发出通知。到目前为止,这种方法似乎正在引导我走上一条更干净的代码之路,我认为这无疑使单元测试更容易,但我想知道我是否偏离了我的方法


以前有人在使用大型应用程序时采用过这种方法吗?我会遇到什么陷阱或地雷吗?我意识到这在很大程度上是一种风格/偏好,但我很好奇我是否走上了一条不好的道路。

您的单例程序是只保存要使用的对象集合,还是同时保存可变的全局状态?对于对象实例化和简单测试,您应该看看DI实现,如。对于模拟测试,请签出


例如,使用Objective,您可以将DataModelService注入任何需要访问数据模型的控制器。

我不确定是否将其称为可变全局状态。我抛弃了我在这里玩的例子;我一直在看反对意见,但我一直在读Objective-C中的DI是适得其反的,因为它的设计基本上不需要它。。这不对吗?你的例子就是我所做的,没有像反对这样的框架。至于不需要DI,我认为这需要根据具体情况来决定,而且DI对不同的人是不同的。在您的具体示例中,我认为使用DI管理单例更容易。