1

我对 DDD 相当陌生,对我来说,我实际上是在寻找一个好的聚合函数。我有一长串用户 ( User) 并为此创建了一个聚合 ( UserAggregate)。

现在在我看来,我可能会根据不同的标准显示用户。假设在这里我没有对我的数据库查询中的列表进行排序,可以在聚合中进行排序吗?我无法想出可以正确执行此操作的应用程序的另一部分,但我可能会误解聚合的功能。

$users = new UserAggregate(array(
 $user1, $user2, $user3, $user4
));

foreach ($users->sortBySurname(), $user) {
 //
}

foreach ($users->sortByLastLoggedIn(), $user) {
 //
}

顺便说一下,过滤也是如此。当我阅读有关 DDD 聚合的信息时,我立即想到了Doctrine\Common\Collections\Collection链接)。对我来说,那种东西看起来像是一个聚合体。所以DDD专家,请赐教:-)

更新

顺便说一句,我想的唯一方法是使聚合相当不相互,并让助手创建新的聚合。但这似乎不是要走的路:

$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);
  }
}
4

1 回答 1

-1

根聚合不是存储库。根聚合代表单个用户及其所有域特定信息。

该排序和过滤应该在存储库中应用。

于 2012-11-07T06:12:11.987 回答