Symfony服务工厂有很多孩子,都有不同的依赖关系

时间:2013-09-10 08:22:46

标签: symfony dependency-injection factory

我正在Symfony开展一个非常大的游戏项目,并继续遇到同样问题的变化。

我有一项服务需要分成多个“子服务”,因为一个类中包含的代码太多。例如,一个自定义JSON序列化程序处理程序,需要为每个序列化方法提供单独的处理程序服务。

我无法找到在“服务系列”之间传递依赖关系的最佳做法。我最好将所有定义保留在services.yml中,以便将来不会破坏,但假设可能无法实现。

这是一个更好的例子 - 我有一个“ActionQueueService”,它从用户那里获取了相当长的一系列动作。我想要做的是创建一个单独的类来处理每种类型的操作,所以 -

  • ActionQueueService //处理动作队列JSON并委托子服务
  • AbstractAction
  • PurchaseAction扩展了AbstractAction
  • SellAction扩展了AbstractAction
  • HarvestAction扩展了AbstractAction

现在,如果将这三个“动作”定义为服务,它们就可以拥有自己的依赖关系。但是,它们都必须注入ActionQueueService - 如果有38个(将会有一天)会发生什么。

对我来说,下一个合乎逻辑的步骤是创建ActionFactory。现在我只将一个依赖项传递给ActionQueueService,它只需调用 -

即可调用任何操作服务
$this->actionFactory->get('Harvest');

我遇到的问题是每个孩子都有自己独立的依赖列表。购买或出售行动需要角色服务和ShopStock服务,HarvestAction需要HarvestService。因为我决定使用Factory方法,所以我必须在工厂类中实例化子服务。我不希望将每个依赖项传递给Factory只是为了让a)将每个依赖项注入每个子项或b)处理一些疯狂的子构造函数逻辑。

一种解决方案是将服务容器传递到工厂,并提出一个允许我即时创建服务的命名约定。我听说这是相当糟糕的做法。也许是服务容器周围的包装器,它限制了可以使用它完成的不良内容的数量。

如果有人对Symfony如何解决这个问题有任何想法我会很感激。有类似的答案,但不幸的是我不知道PHP / Symfony以外的任何语言。

0 个答案:

没有答案