你如何处理iPhone应用程序中的域对象?

时间:2009-03-11 18:06:20

标签: iphone cocoa cocoa-touch

我现在有一些应用程序,但我还是比较新的。我正在寻找最佳实践建议,甚至是Cocoa Touch框架的一个我不知道的功能,如果有人知道的话。

在第一个应用程序中,我在Application Delegate中创建了Domain Objects,然后根据需要将它们传递给我的ViewControllers。例如,在App Delegate中,我尝试从内存加载用户的帐户,如果在那里,我将使用initWithCoder创建一个Account对象。然后,每当我实例化一个需要Account对象的ViewController时,我都会将它传递给具有自己帐户属性的ViewController。

但是我觉得我的应用程序中有太多代码,所以我决定让我的ApplicationDelegate管理我的域对象。只要ViewController需要一个,它就会查询ApplicationDelegate,如下所示:

MyAppDelegate* myAppDelegate = [UIApplication sharedApplication].delegate;
ADomainObject* anObject = myAppDelegate.anObject;
这是疯了吗?这是个好主意吗?我完全靠自己做了所以我想知道是否还有更好的东西。由于我是iPhone开发人员的新手,我正在努力学习最好的做事方式......

4 个答案:

答案 0 :(得分:2)

不,这不是一个糟糕的设计。您可能希望使用Singleton模式作为替代方案,或者更有可能是App Delegate方案的补充。你可以写出像

这样的东西
[ADomainObject sharedDomainObject]

获取你的对象。类方法也是在单文档应用程序中获取域对象的好方法 - 因为所有iPhone应用程序都是单个文档。例如,如果您有Folder个对象的层次结构,则可能有类+ (NSArray *)rootFolders+ (NSArray *)allEmptyFolders等类方法来获取特定的对象组。

答案 1 :(得分:2)

你描述的是什么;我在桌面上处理Core Data时使用了相同的策略,其中我的应用程序具有应用程序控制器拥有的单个托管对象上下文。除了亚历克斯提到的单身人士之外,另一个常见的策略是实现一个“数据控制器”来处理加载和管理域对象的逻辑。在这种情况下,您的应用程序控制器仍将负责初始化和管理数据控制器与视图控制器之间的关系,但它不会与特定于模型对象的代码混杂在一起。

答案 2 :(得分:1)

在我已经完成的非Cocoa应用程序开发中,我发现使用DI方法很有帮助,其中对象具有从中传递给它们的依赖对象(在本例中为您的域对象)在外面,而不是明确地向他们伸出援手。 “明确地询问它们”将意味着您正在做的事情 - 通过应用程序委托的属性访问它们。以某种方式在ViewControllers和域对象之间创建关联是否可能/容易/愚蠢,以便ViewControllers不必明确地要求它们?例如,有没有办法在笔尖中建立这些关系?我问,不是建议,因为我不是Cocoa的专家。 (抱歉在这个帖子上背诵我的问题,但它与原始问题非常相关。)

答案 3 :(得分:1)

我根本不会让应用代表参与其中。如果只有一个控制器使用该对象,则View控制器将实例化并拥有模型对象。否则,我使用类级方法来使用+ [DatabaseModel sharedDatabaseModel]方法检索模型的静态实例。

相关问题