如何检索聚合对象?

时间:2010-06-03 09:23:18

标签: php repository domain-driven-design aggregate

在DDD中,Repository负责保存和检索域对象,并且还用作聚合根的集合。我的问题是你如何检索Aggregate的那些子实体(比如说来自DB)的信息,其中基本规则是Repository应该只包含Aggregate Roots(父对象)的集合而不是子对象的集合?

例如:

用户(父对象) 订单(子对象)

用户域对象存储在用户表中,订单存储在另一个表中。

基本上,检索域对象可能是这样的:

<?php
$userRepos = new UserRepository();
$user = $userRepos->find($userId);
?>

如何检索User实体的子对象(Orders)作为User聚合的一部分?

1 个答案:

答案 0 :(得分:2)

我相信即使Repositories只保存对Aggregate Roots的引用,Aggregate Roots也会保存对其子对象(Value对象)的引用。因此,生成Aggregate对象的Factories将在Aggregate Roots和Value对象之间构建这些“内部”引用,然后只需要将Aggregate Root放在Repositories中。然后,一旦将聚合根从存储库中拉出(通过简单的getter API),就可以检索这些子对象。