LoginSignup
88
86

More than 5 years have passed since last update.

ドメイン駆動設計: Aggregate実装チェックシート

Last updated at Posted at 2013-04-14

ドメイン駆動設計でAggregate(集約)を実装するためのチェックシートです。

□ トランザクション分析をしてトランザクションの単位でAggregateを実装しているか?

単にツリー構造や分類学的にAggregateを作っているとしたら正しくない。

Entityを複数含むAggregateを作っている場合は、トランザクション分析していない可能性があるため、

ユースケースを確認しビジネス上のトランザクション分析を行う。

□ Aggregateの大きさは大き過ぎないか?

もし、Aggregateが複数のEntityを含んでいる場合は、

EntityをValue Objectにすることができないか、

直接参照ではなくEntityをAggregate Rootに昇格しIDによって参照する設計にできないかを検討する余地がある。

□ 他のAggregateは直接参照ではなく、IDによって参照されているか?

もし、Aggregate が他のAggregateを直接参照している場合は、

IDを表現したValue ObjectをそのAggregateの代理として参照できないか検討する。

□ 複数のAggregateが同時に変更される場合にDomain Eventを使っているか?

Application Serviceにて、ひとつのトランザクションで複数のAggregateを更新している場合は、

Domain Eventのパターンが利用できないか検討する。

□ ひとつのEntityをAggregate Rootとしてモデリングしているか?

どのEntityがAggregate Rootかを認識すること。

□ そのAggregateはグローバル空間での一意なIDを持っているか? UUIDなど。

□ Aggregateの部品はEntityではなくValue Objectにできるかどうか検討したか?

□ クライアントには最低限の知識のみ提供されているか? Tell, Don't Ask原則のガイドラインに従っているか?

そのAggregateがテストしにくかったり、メンテナンスが難しいとしたら、

必要以上にクライアントに知識が漏洩している可能性がある。

Command(更新)とQuery(問い合わせ)の分別をつけ、

クライアントがCommandの条件分岐のためにQueryをしていないかチェックする。

□ RepositoryやDomain ServiceをAggregateにDependency Injectionしていないか?

Aggregateのオブジェクトは沢山つくられつため、DIは潜在的なパフォーマンスを損なう。

複数のAggregateに問い合わせる場合は、Application ServiceでそれぞれのRepositoryをコールしよう。

88
86
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
88
86