What is it, naokirin?

Eric EvansのDDDを読んでます(4)

今回は第6章(ドメインオブジェクトのライフサイクル)まで。

集約

集約はエンティティやバリューオブジェクトを1つのオブジェクトとみなし、扱います。 これにより関連をわかりやすくし、また不変条件を維持することで、オブジェクトの一貫性を保つようにします。

集約は小さなエンティティやバリューオブジェクトだけでは複雑化してしまう関連をシンプルにする役目のようです。また外部からのアクセスを集約のルートになるオブジェクトへのアクセスに制限することで、集約内の不変条件の維持を楽にできるようにしています。

実際のオブジェクト指向プログラミングでも、理解しやすく同時に変更されるような単位にクラスを分離していても、それらにアクセスするのはあるルートになるクラスのみで、他とのやりとりはそのルートになるクラスとしか行わないといったような設計をすることがあるのでイメージはしやすい感じがします。

ファクトリ

ファクトリは集約のインスタンスを生成し、生成されるオブジェクトに複雑な生成の責務を持たせることなく、またクライアントに集約の内部を晒すことがないようにします。

いわゆるGoFデザインパターンの生成に関するパターンに当たるタイプだと考えるとイメージできるかなと思いました。

リポジトリ

リポジトリは永続化されたオブジェクトに対して、メモリ上にあるかのようにアクセスできる方法を提供します。これによりクライアントが実際に内部でどのような永続化技術が使われているかを意識しないで済むようにできます。

またリポジトリで書かれている点で「テストで使用するために、ダミーの実装で置き換えるのが容易になる」というのも書かれていました。

第6章は各パターンはイメージしやすいものが多かったように感じました。 これ以降の章も読み進めつつ、実際の応用について学んでいきたいと思います。

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)