Symfony2:放置业务逻辑的最佳场所

smo*_*eno 4 symfony

我读到一个好的做法,实体很轻,只有吸气剂和制定者.但是我有一些带有某种逻辑的自定义方法.

public function calculatePrice(){

  /*
 Here I have to do many math operations 
 including access to other repositories to get 
 specific data (taxes, comissions, ect) from others entities
*/


}
Run Code Online (Sandbox Code Playgroud)

在哪里放置这种"更复杂的方法":

//in controller
$product->calculatePrice()  

//in twig templates
{{ product.calculatePrice }}
Run Code Online (Sandbox Code Playgroud)

Ste*_*nte 11

我喜欢将业务逻辑与Service类中的实体相关联.IMO,实体存储库应该只负责查询数据库中实体组的多个项目,或者非常具体的"findBy"方法(例如:fetch all Messages属于Userwhere isRead = 0).

通常情况下,您会发现自己使用多个服务类来处理特定的业务逻辑块 - 将所有这些保留在服务层而不是将其保存到存储库中更容易(也更清晰).

使用业务逻辑服务将产生更多模块化代码.如果您的Product实体和存储库不包含任何业务逻辑(通常每个应用程序非常具体),您可以更轻松地在其他项目中重用这些类,而无需进行尽可能多的清理.

  • @smoreno您可以向实体添加字段(`price`),将对象传递给服务并让它设置字段的值.无需计算模板中的价格. (6认同)