我有一个名为 的域服务OrderService
,它有一个saveOrder()
方法:
class OrderService
{
// ...
public function saveOrder(Order $order)
{
$this->orderRepository->add($order);
// $this->entityManager->flush();
$this->notificationService->notifyOrderPlaced($order);
}
}
saveOrder()
将订单添加到存储库(内部调用persist()
EntityManager),然后将订单传递给 NotificationService 以发送适当的通知(电子邮件、短信)。
问题是,虽然 NotificationService 需要将订单 ID 包含在通知中,但订单还没有 ID,因为它没有被持久化到数据库(ID 是自动生成的)。
显而易见的解决方案似乎是将 EntityManager 作为依赖项传递给 OrderService,并flush()
在存储库add()
方法之后,如上面的示例所示。但我一直不愿意让域服务知道 EntityManager,宁愿让它们只与存储库或其他服务对话。
- 依赖 EntityManager 的域服务有哪些缺点(如果有的话)?
- 有更好的选择吗?
注意:我使用的是 PHP 和 Doctrine ORM,但我相信同样的原则也适用于 Java 和 Hibernate。