我对 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);
}
}