前回のふりかえり
アナリシスパターンを適用する
- アナリシスパターンは、分析のパターン。ドメイン分析の中で繰り返し現れる構造をパターン化したもの。
- アナリシスパターンの用語を使用する場合は、そのパターンが規定する基本的な概念を崩さないように注意する。
第12章 デザインパターンをモデルに関係づける
デザインパターンとドメインパターン
- 今まではMDDのコンテキストにおいて、ドメインモデルの問題を解決するためにパターンを使っていた(ドメインパターン)
- それに対しデザインパターンというのは、技術的な側面に焦点をあて、一般的な設計の問題を特定のコンテキストで解決するためにカスタマイズされたもの
ただ、デザインパターンの一部はドメインパターンとして使用できる。(デザインパターンの中には、ドメインに表れる深い概念と一致するものもある)
- DDDでそういうパターンを利用するためには、パターンを同時に二つのレベルで考えないといけない。
- コードで用いられる技術的なデザインパターン
- モデルで用いられる概念的なパターン
ストラテジー(別名ポリシー)
ストラテジーパターンとは
- アルゴリズムのファミリーを定義し、それぞれをカプセル化して、相互に交換可能にするもの。
- そのモデルが複数のプロセスを持っている時、その選択肢を記述するとプロセス定義が複雑になってしまうことがある
- このような時、ストラテジーパターンによって、プロセスの主要概念からふるまいのバリエーションを分離することができる。
- デザインパターン・ドメインパターンとしてのストラテジー
ドメインパターンとしてストラテジーを使う時の留意点
- プロセスの中で変化する部分を、モデルの中で独立したストラテジーオブジェクトにくくり出す。
- ルールと、ルールが支配するふるまいは切り離してくくり出す
- ルールや置き換え可能なプロセスは、ストラテジーデザインパターンに従って実装する
コンポジット
コンポジットとは
オブジェクトを組み立てて、部分と全体の階層を表すツリー構造を作ること
- ネストの深い複雑なオブジェクトの場合、ネストされたコンテナの関係性がモデルに反映されていないと、共通しているはずのふるまいを各階層で繰り返さなければならず、ネストに柔軟性がなくなってしまう
- コンポジットを使うことで、個々のオブジェクトとオブジェクトの複合体(色々な部品がネストしながら寄り集まったもの等)を扱いやすくなる。
- 構造の各レベルで同じふるまいが提供され、小さい部品も大きい部品も同じように扱うことができる。
コンポジットを使う時の留意点
- コンポジットを構成するすべてのメンバを含む抽象型を定義する
- クライアントはこの抽象型を扱う
- 情報を戻すメソッドはコンテナに実装し、内容について集約された情報を戻す
- リーフノード(コンポジットの中身を表す)は、それぞれ独自の値に基づいてそれらのメソッドを実装する
思ったこと・気になったこと
コンテナ=エンティティ
でリーフノード=値オブジェクト
という理解で合ってるだろうか...?