我读到一个好的做法是实体轻,只有吸气剂和制定者。但是我有一些逻辑的自定义方法,例如。
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
*/
}
将这种“更复杂的方法”放在哪里:
//in controller
$product->calculatePrice()
//in twig templates
{{ product.calculatePrice }}
答案 0 :(得分:11)
我喜欢将业务逻辑与Service类中的实体相关联。 IMO,实体存储库应该只负责查询数据库中实体组的多个项目,或者非常具体的“findBy”方法(例如:获取属于Messages
的所有User
isRead = 0
})。
通常情况下,您会发现自己使用多个服务类来处理特定的业务逻辑块 - 将所有这些保留在服务层而不是将其整合到存储库中更容易(也更清晰)。
使用业务逻辑服务将导致更多模块化代码。如果您的Product
实体和repo不包含任何业务逻辑(通常每个应用程序非常具体),您可以更轻松地在其他项目中重用这些类,而无需进行大量清理。