Domain-Driven Design(DDD)の第II部は、"The Building Blocks of a Model-Driven Design" という表題で、モデリングの基本要素とその実装方法を解説している。
Layered Architecture で、分離独立させたドメイン層をモデリングする、基本要素は、
・Associations ( 関連は最小化する )
・Entities パターン ( 識別する )
・Value Objects パターン ( 説明する )
・Modules パターン ( 分ける。まとめる。)
・Aggregates パターン ( ブドウの房 )
・Factories パターン ( コンストラクションの分離 )
・Repositories パターン ( 情報の保存と取出し )
ひとつひとつのパターンの説明は、いまいちピンとこない内容も多い。
DDD のII部の最後、第7章で "Using the Language" ということで、上記のパターンの、具体的な使い方を説明している。
パターン言語というのは、設計の成果そのものではない。
モデルや設計をいろいろ検討してり議論するためのボキャブラリ(道具)。
7章では、エバンスは、「貨物輸送の追跡システム」を例に、パターンを、どうやってモデリングや設計の現場の文脈で使うか、道具の使い方を具体的に書いている。
話しの流れとしては、
・貨物追跡システム、および関連する、予約システム、請求システムの概要説明。
・簡単な概念クラス図の提示。
・まずドメイン層の独立させる。(アプリケーションの関心事をシンプルにまとめる)
・次に、概念モデルのオブジェクトを Entities と Value Objects を区別する
・そして、ひとつひととの関連を丁寧に検討し、意味を明確にしていく。
・Aggregate を定義する(いつも一緒に扱いたいカタマリの発見)
・Repositories を選ぶ ( 「関連」の意味を丁寧に検討して、ほんとうに必要な Repository を発見していく)
・モデルのウォークスルー (サンプルアプリケーションの利用シナリオでモデルを検証してみる)
・オブジェクトを生成するコードの検討(識別情報の落とし穴や、Aggregate の一貫性破りのリスクの検討)
・一息入れて、モデルをリファクタリング ( Aggregate の別案の検討 )
・モジュール化の検討 (問題領域の言葉でパッケージを作る)
・関連システムとの役割分担と連携の検討
・パフォーマンスチューニングのためのモデリングの選択肢の検討
7章は、DDD の前半のハイライトだと思います。
6章までに登場するパターンは、パターン別の説明を読むだけでも、いろいろ参考になるし、モデリング、設計・実装のヒントになる。
でも、ぴんとこないところも多いし、自分でも、理解があやふやと感じる。
7章は、それぞれのパターンの理解度をチェックする格好の材料だと思います。
それまでの章は、「素振り」や「壁打ち」みたいなもの。基礎テクニックの反復練習みたいなところがあって、面白みが足りない。
それに比べ、7章は、ミニゲーム形式で、実際の開発プロジェクトの感じで、パターンが登場する。興味が持てるし、個別のパターンの説明では理解できなかった点が、サンプルを読んではじめて理解できたこともたくさんあった。
もっとも、7章を読んで、かえって、わからなくなったと感じた点もあります。
また読み返すたびに、自分が勘違いしていたり、見落としていたことが、必ずでてくる。
なかなか読み応えのある本です。
ざっと斜め読みして、あとは、作業の合間に、目に付いたところだけ拾い読み、というのが、いけないでしょうけど。
モデリングの基本要素
Layered Architecture で、分離独立させたドメイン層をモデリングする、基本要素は、
・Associations ( 関連は最小化する )
・Entities パターン ( 識別する )
・Value Objects パターン ( 説明する )
・Modules パターン ( 分ける。まとめる。)
・Aggregates パターン ( ブドウの房 )
・Factories パターン ( コンストラクションの分離 )
・Repositories パターン ( 情報の保存と取出し )
ひとつひとつのパターンの説明は、いまいちピンとこない内容も多い。
パターンを実際に使ってみる
DDD のII部の最後、第7章で "Using the Language" ということで、上記のパターンの、具体的な使い方を説明している。
パターン言語というのは、設計の成果そのものではない。
モデルや設計をいろいろ検討してり議論するためのボキャブラリ(道具)。
7章では、エバンスは、「貨物輸送の追跡システム」を例に、パターンを、どうやってモデリングや設計の現場の文脈で使うか、道具の使い方を具体的に書いている。
話しの流れとしては、
・貨物追跡システム、および関連する、予約システム、請求システムの概要説明。
・簡単な概念クラス図の提示。
・まずドメイン層の独立させる。(アプリケーションの関心事をシンプルにまとめる)
・次に、概念モデルのオブジェクトを Entities と Value Objects を区別する
・そして、ひとつひととの関連を丁寧に検討し、意味を明確にしていく。
・Aggregate を定義する(いつも一緒に扱いたいカタマリの発見)
・Repositories を選ぶ ( 「関連」の意味を丁寧に検討して、ほんとうに必要な Repository を発見していく)
・モデルのウォークスルー (サンプルアプリケーションの利用シナリオでモデルを検証してみる)
・オブジェクトを生成するコードの検討(識別情報の落とし穴や、Aggregate の一貫性破りのリスクの検討)
・一息入れて、モデルをリファクタリング ( Aggregate の別案の検討 )
・モジュール化の検討 (問題領域の言葉でパッケージを作る)
・関連システムとの役割分担と連携の検討
・パフォーマンスチューニングのためのモデリングの選択肢の検討
理解度チェック
7章は、DDD の前半のハイライトだと思います。
6章までに登場するパターンは、パターン別の説明を読むだけでも、いろいろ参考になるし、モデリング、設計・実装のヒントになる。
でも、ぴんとこないところも多いし、自分でも、理解があやふやと感じる。
7章は、それぞれのパターンの理解度をチェックする格好の材料だと思います。
それまでの章は、「素振り」や「壁打ち」みたいなもの。基礎テクニックの反復練習みたいなところがあって、面白みが足りない。
それに比べ、7章は、ミニゲーム形式で、実際の開発プロジェクトの感じで、パターンが登場する。興味が持てるし、個別のパターンの説明では理解できなかった点が、サンプルを読んではじめて理解できたこともたくさんあった。
もっとも、7章を読んで、かえって、わからなくなったと感じた点もあります。
また読み返すたびに、自分が勘違いしていたり、見落としていたことが、必ずでてくる。
なかなか読み応えのある本です。
ざっと斜め読みして、あとは、作業の合間に、目に付いたところだけ拾い読み、というのが、いけないでしょうけど。