有或没有州的Symfony2服务

时间:2015-02-14 01:46:15

标签: symfony service controller

对Symfony2来说很新,我一直在阅读services in Symfony2 should be stateless,我觉得这有点道理。

另一方面,我试图重构一个庞大的250行SomeController->listAction(),它创建了一个包含许多过滤器的数据表,总共有4个表格。为了创建所有内容,listAction()调用了大量服务FiltersManagerUserManagerApiFetcherPaginator等等。

我想(几乎)将所有代码从listAction移出到某些MyUsefulClass,为此我需要该类具有状态。所以我可以看到两个选项:

  • 创建MyUsefulClass作为自定义模型类,但我需要手动创建新的服务实例。
  • MyUsefulClass定义为服务,以便我可以注入所有其他服务,但我需要为该服务提供状态。

我选择了第二个选项,但我不知道我是否错过了其他一些选项,而且我甚至不确定它是否真的很重要保持无国籍的服务......

1 个答案:

答案 0 :(得分:1)

我最终创建了作为服务工作的类,因为我认为服务是Symfony在很多方面最好的事情之一(虽然它们有一些问题)。

为了保持我的服务无状态,我所做的是创建另一组类,几乎只是具有一些属性的值对象。这些值对象保持我需要的状态,并将它们传递给我的服务中的方法(和/或从中返回)。

这种方法让我编写了更多的类,但这对我来说很有意义,而且我可以清楚地将执行该工作的代码与仅包含某些属性值的代码分开。