私は 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);
2 番目の集計は新しいインスタンスであるため、ヘルパーは次のようになります。
class FilterSomething
{
public function filter(Aggregate $aggregate)
{
$items = $aggregate->getItems();
$items = $this->doFilter($items);
return new Aggregate($items);
}
}