首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以使用Typhoon框架注入NSManagedObject实例吗?

可以使用Typhoon框架注入NSManagedObject实例吗?
EN

Stack Overflow用户
提问于 2014-11-09 07:40:33
回答 1查看 405关注 0票数 1

我想用Typhoon框架注入NSManagedObject子类。我还没有看到这样的例子,但我认为这可能是可能的。

我正在使用MO生成器,在NSManagedObject和最终的子类之间有一个超类,它在这个通用的抽象基类中,如果有什么不同的话,我想注入这个基类。

有没有人在这方面取得了成功?

任何建议都将不胜感激。如果我能提供更多的信息,请告诉我。

EN

回答 1

Stack Overflow用户

发布于 2014-11-09 10:38:44

使用台风:设置核心数据

首先,如果你想用Typhoon设置核心数据,这样你就可以将数据源注入到你的视图控制器中,Ryoichi Izumita提供了一个Typhoon+CoreData+RAC示例应用程序。它显示:

  • UIStoryboard Data
  • Reactive Cocoa

在此示例中。。。

顶级程序集是

  • AppDelegate在启动时注入了一些核心数据组件。这允许应用程序代理在应用程序terminated.
  • The's a CDRViewController时保存上下文,这是在主故事板上声明的。因为我们已经从应用程序的plist file启动了Typhoon,所以所有的故事板都将是TyphoonStoryboard的一个实例。这些工作方式就像常规的故事板一样,增加了一个好处,那就是依赖项是根据我们的程序集中的规则来注入的。这个控制器注入了一个核心数据源。
  • Ryoichi-san创建了一个category on NSManagedObjectContext,使得使用DI和集成Reactive Cocoa的设置变得更容易。

核心数据汇编:

主程序集指的是辅助程序集- CDRCoreDataComponents,它负责设置核心数据。这个文件中的一些值是从configuration file加载的,这使得设置生产环境和测试环境变得很容易。

现在来具体解决你的问题。。。

注入模型类本身:

通常,持久化域对象往往具有没有方法的属性,许多人认为这不应该是这种情况(它由Martin Fowler and others 'the anemic domain object anti-pattern调用)。他们认为,在正确的面向对象的设计中,模型对象将具有行为和属性,并且行为的理想位置是接近它们所表示的数据。

问题是:

  • 为域对象具有行为,它们必须经常依赖于合作者。
  • ,当然,如果对象寻找它们自己的依赖关系,我们就会有另一个反模式。DI是必需的。

‘钩点’方法(受台风支持):

我们可以按如下方式指示Typhoon to inject a pre-obtained instance

代码语言:javascript
复制
Knight* knight = ... //Loaded from persistent storage
[componentFactory inject:knight]; //Matches by type
[componentFactory inject:knight withDefinition:@selector(selectorInAssembly)];

这就是“钩点”方法。在获得一个实例后,我们告诉Typhoon注入它。首先we inject the TyphoonComponentFactory itself到我们的数据访问对象,网络客户端或任何将发出该对象的对象。作为最后一步,我们告诉Typhoon根据组装中定义的配方注入我们的模型。等着瞧!

台风A自定义核心数据集成(不支持):

与其使用这种“钩点”方法,也许我们可以提供与核心数据更紧密的集成(就像我们对UIStoryBoard所做的那样),这样上面的步骤就不是必要的了?Typhoon目前不支持此功能。

使用面向方面编程注入域对象的:(台风不支持)

事实上,除了核心数据的特定解决方案之外,还有另一种使用"AOP“注入任何域对象的方法。我们的意思是截取和检测所有域对象的init方法,以便随后根据程序集中的规则加载依赖项。这就是Spring (一种流行的DI+AOP框架)中的@Configurable批注的工作方式。问题是找到一种合适的方法来将模型对象与TyphoonComponentFactory关联起来,而不是太具侵入性(即单例)。“这个产品、汽车和假日的每个实例都与这个程序集关联”有一些缺点,这就是为什么我们到目前为止一直倾向于“钩点”方法。

你的反馈:

如果你对钩点方法感到满意,那就太好了。如果您对上面描述的特定核心数据集成或"AOP“解决方案感兴趣,那么我们将很乐意与您一起探索它。已经有一些讨论了。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26823306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档