【发布时间】:2010-06-07 03:15:48
【问题描述】:
假设存储库中没有使用 ORM(例如 Doctrine),我的问题是实例化聚合对象的正确方法是什么?它是直接在 Repository 中实例化子对象,并通过其设置器将其分配给 Aggregate Root,还是 Aggregate Root 负责构建其子实体/对象?
示例 1:
class UserRepository
{
// Create user domain entity.
$user = new User();
$user->setName('Juan');
// Create child object orders entity.
$orders = new Orders($orders);
$user->setOrders($orders);
}
示例 2:
class UserRepository
{
// Create user domain entity.
$user = new User();
$user->setName('Juan');
// Get orders.
$orders = $ordersDao->findByUser(1);
$user->setOrders($orders);
}
而在示例 2 中,订单的实例化是在用户实体内部进行的。
【问题讨论】:
-
我不太确定(不完全理解这个问题),但最后的评论说“在用户实体内部处理订单” - 我认为你 don' t 想要这样做。实体不想自作主张。如果您必须从实体内部委派此类责任,则应将其代理给域服务。
标签: repository domain-driven-design aggregate