代码之家  ›  专栏  ›  技术社区  ›  bpapa

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

  •  2
  • bpapa  · 技术社区  · 16 年前

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

    在第一个应用程序中,我在应用程序委托中创建了域对象,然后根据需要将它们传递给视图控制器。例如,在应用程序委托中,我会尝试从内存中加载用户的帐户,如果存在,我会使用initwitcoder创建一个帐户对象。然后,每当我实例化一个需要account对象的viewcontroller时,我都会将它传递给拥有自己account属性的viewcontroller。

    但是我觉得我的应用程序中有太多的代码,所以我决定让我的applicationDelegate管理我的域对象。每当一个viewcontroller需要一个时,它会像这样查询applicationdelegate:

    MyAppDelegate* myAppDelegate = [UIApplication sharedApplication].delegate;
    ADomainObject* anObject = myAppDelegate.anObject;
    

    这是疯了吗?这是个好主意吗?我完全是自己编出来的,所以我想知道外面有没有更好的。因为我对iphone dev不熟悉,所以我正在努力学习做事情的最佳方法…

    4 回复  |  直到 16 年前
        1
  •  2
  •   Marc Charbonneau    16 年前

    您所描述的工作正常;我在处理桌面上的核心数据时使用了相同的策略,在桌面上,我的应用程序有一个由应用程序控制器拥有的单一托管对象上下文。除了Alex提到的单例,另一个常见的策略是实现一个“数据控制器”,它处理加载和管理域对象的逻辑。在这种情况下,应用程序控制器仍然负责初始化和管理数据控制器和视图控制器之间的关系,但它不会与特定于模型对象的代码混淆。

        2
  •  2
  •   Alex    16 年前

    不,设计不错。您可能希望研究使用singleton模式作为替代方案,或者更可能是对应用程序委托思想的补充。你可以写一些像

    [ADomainObject sharedDomainObject]
    

    去拿你的东西。类方法也是在单个文档应用程序中获取域对象的好方法,因为所有iPhone应用程序都是单个文档。比如说,如果你有 Folder 对象,您可能有一个类方法 + (NSArray *)rootFolders + (NSArray *)allEmptyFolders 获取特定的对象组。

        3
  •  1
  •   erikprice    16 年前

    在我所做的非Cocoa应用程序开发中,我发现使用 DI 方法,在对象的依赖对象(在本例中是您的域对象)从外部传递给它们的情况下,而不是显式地伸出并请求它们。”明确地要求它们“将意味着一些与您当前正在做的事情一致的事情——通过应用程序委托上的属性访问它们。在viewcontroller和域对象之间以某种方式创建关联是可能的/容易的/愚蠢的,这样viewcontroller就不必显式地要求它们了吗?例如,在NIB中是否有建立这些关系的方法?我是在问,不是在建议,因为我不是可可的专家。(很抱歉把我的问题背在这条线上,但这与最初的问题很相关。)

        4
  •  1
  •   Lucius Kwok    16 年前

    我根本不会让应用程序代表参与进来。如果只有一个控制器使用该对象,则视图控制器将实例化模型对象并拥有该对象。否则,我使用一个类级别的方法来检索模型的静态实例,方法是+[databaseModelsharedatabaseModel]方法。