我想用 Typhoon 框架注入 NSManagedObject 子类。我还没有看到这样的例子,但我认为这可能是可能的。
我正在使用 MO 生成器,并且在 NSManagedObject 和最终子类之间有一个超类。它在这个通用抽象基类中,如果这有什么不同,我想注入其中。
有没有人在这方面取得任何成功?
任何意见,将不胜感激。如果我可以提供更多信息,请告诉我。
我想用 Typhoon 框架注入 NSManagedObject 子类。我还没有看到这样的例子,但我认为这可能是可能的。
我正在使用 MO 生成器,并且在 NSManagedObject 和最终子类之间有一个超类。它在这个通用抽象基类中,如果这有什么不同,我想注入其中。
有没有人在这方面取得任何成功?
任何意见,将不胜感激。如果我可以提供更多信息,请告诉我。
使用 Typhoon 设置核心数据:
首先,如果您想使用 Typhoon 设置 Core Data,以便您可以将数据源注入到您的视图控制器中,这里有一个Typhoon+CoreData+RAC示例应用程序,由Ryoichi Izumita 友情发布。表明:
在这个样本中。. .
顶层程序集是CDRApplicationAssembly
核心数据组装:
主程序集是指一个辅助程序集 - CDRCoreDataComponents,它负责设置核心数据。该文件中的一些值是从配置文件中加载的,这使得设置例如生产环境和测试环境变得容易。
现在具体解决你的问题。. .
自己注入模型类:
通常持久域对象往往具有没有方法的属性,并且许多人认为不应该是这种情况(Martin Fowler 和其他人称之为“贫血的域对象反模式”)。他们认为,在正确的面向对象设计中,模型对象将具有行为和属性,并且行为的理想位置靠近它们所代表的数据。
问题是:
'hook-point' 方法(由 Typhoon 支持):
我们可以指示 Typhoon注入一个预先获取的实例,如下所示:
Knight* knight = ... //Loaded from persistent storage
[componentFactory inject:knight]; //Matches by type
[componentFactory inject:knight withDefinition:@selector(selectorInAssembly)];
这是“钩点”方法。在获得一个实例后,我们告诉 Typhoon 注入它。首先,我们将TyphoonComponentFactory
自身注入到我们的数据访问对象、网络客户端或任何将发出该对象的东西中。作为最后一步,我们告诉 Typhoon 根据程序集中定义的配方注入我们的模型。瞧!
自定义核心数据集成(Typhoon 不支持):
除了使用这种“挂钩点”方法,也许我们可以提供与 Core Data 更紧密的集成(就像我们对 UIStoryBoard 所做的那样),这样就不需要上述步骤了?Typhoon 目前不支持此功能。
使用 AOP 注入域对象:(Typhoon 不支持)
事实上,除了针对 Core Data 的特定解决方案之外,还有另一种方法可以使用“AOP”注入任何域对象。我们的意思是拦截和检测域对象的所有 init 方法,以便随后根据程序集中的规则加载依赖项。这就是Spring(一种流行的 Java DI+AOP 框架)中的@Configurable
注解的工作方式。问题是找到一种合适的方法来将模型对象与 a 关联起来,而这不会太具有侵入性(即单例)。说“这个 Product、Car 和 Holiday 的每个实例都与这个程序集相关联”有一些缺点,这就是为什么到目前为止我们偏爱“hook-point”方法的原因。TyphoonComponentFactory
您的反馈:
如果您对钩点方法感到满意,那就太好了。如果您对特定的核心数据集成或上述“AOP”解决方案感兴趣,那么我们很乐意与您一起探索它。已经有一些讨论了。