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);

2 番目の集計は新しいインスタンスであるため、ヘルパーは次のようになります。

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 に答える