带有或不带有状态的Symfony2服务


Symfony2 services with or without state

对于Symfony2来说,这是一个全新的概念,我读到Symfony2中的服务应该是无状态的,我认为这有点道理。

另一方面,我正在尝试重构一个250行的大型SomeController->listAction(),它创建了一个包含许多过滤器的数据表,总共有4个表单。为了创建所有这些东西,listAction()调用了许多服务FiltersManagerUserManagerApiFetcherPaginator

我想把(几乎)所有的代码从listAction移到一些MyUsefulClass,为此我需要那个类具有state。所以我可以看到两个选项:

  • MyUsefulClass创建为自定义模型类,但我需要手动创建服务的新实例
  • MyUsefulClass定义为一个服务,这样我就可以注入所有其他服务,但我需要给那个服务一个状态

我会选择第二个选项,但我不知道我是否错过了其他选项,我甚至不确定保留无状态服务是否真的很重要。。。

我最终创建了作为服务完成工作的类,因为我认为服务在很多方面都是Symfony最好的东西之一(尽管它们有一些问题)。

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

这种方法使我能够编写更多的类,但它对我来说是有意义的,而且我可以清楚地将执行任务的代码与只保存一些属性值的代码区分开来。