我是DDD的新手,对我而言,我实际上搜索了聚合的良好功能。我有很长的用户列表(User
),并为此创建了一个聚合(UserAggregate
)。
现在在我看来,我可能会根据不同的标准显示用户。我们假设我在这里不对数据库查询中的列表进行排序,可以在聚合中进行排序吗?我无法提出应用程序的另一部分,我可以正确地做到这一点,但我可能会误解聚合的功能。
$users = new UserAggregate(array(
$user1, $user2, $user3, $user4
));
foreach ($users->sortBySurname(), $user) {
//
}
foreach ($users->sortByLastLoggedIn(), $user) {
//
}
顺便过滤同样适用。当我读到有关DDD聚合的内容时,我立即想到了Doctrine\Common\Collections\Collection
(link)。那种看起来像是我的聚合。那么DDD专家,请赐教: - )
更新
我认为btw的唯一方法是使聚合变得相当不变,并有助手来创建新的聚合。但这似乎不是要走的路:
$aggregate = new UserAggregate(array($user1, $user2));
$helper = new FilterSomething;
$aggregate = $helper->filter($aggregate);
第二个聚合是一个新实例,因此帮助器如下所示:
class FilterSomething
{
public function filter(Aggregate $aggregate)
{
$items = $aggregate->getItems();
$items = $this->doFilter($items);
return new Aggregate($items);
}
}
答案 0 :(得分:-1)
根聚合不是存储库。根聚合表示单个用户及其所有特定于域的信息。
应该在存储库中应用排序和过滤。