MENU

『ドメイン駆動設計』第13章 エヴァンス本 まとめ&感想

前回のふりかえり

第12章 デザインパターンをモデルに関係づける

  • デザインパターンというのは、技術的な側面に焦点をあて、一般的な設計の問題を特定のコンテキストで解決するためにカスタマイズされたもの
  • ドメインパターンとしても使用できるデザインパターン
    • ストラテジーパターン
      • アルゴリズムのファミリーを定義し、それぞれをカプセル化して、相互に交換可能にするもの。
      • プロセスの主要概念からふるまいのバリエーションを分離することができる。
    • コンポジットパターン
      • オブジェクトを組み立てて、部分と全体の階層を表すツリー構造を作るもの
      • 個々のオブジェクトとオブジェクトの複合体(色々な部品がネストしながら寄り集まったもの等)を扱いやすくなる。



第13章 より深い洞察へ向かうリファクタリング

より深い洞察へ向かうリファクタリングを行うには

これは多くの側面を持つプロセスだが、重点的に取り組むべきは下記の3点

  • ドメインに馴染む
  • 常に、物事に対して違う見方をする
  • ドメインエキスパートとの対話を途切れさせない

開始

より深い洞察へ向かうリファクタリングは、さまざまな方法で始めてよい。

  • コードをきっかけにした開始方法
    • コードの持つ問題(複雑やぎこちなさ)への対応
  • ドメインモデルをきっかけにした開始方法
    • モデルの言語がドメインエキスパートと切り離されているように見える
    • 新しい要求が自然には適合しない
  • 学習の結果発生する開始(より深くドメインを理解するようになることで、モデルをもっとわかりやすくする機会を見出す)


問題のある場所を発見することで、開発者は新しいモデルの要素を体系的に探し出せるようになる。 それには下記のような方法がある

探究チーム

意図を明確かつ自然に伝達するようモデルを改良する方法を探し出す

  • 従来のリファクタリングであれば、数時間で終わるわずかな変更でも十分
  • 新しいモデルを模索するには、長い時間がかかり、多くの人々の参加が必要となる

探究の方法

  1. 変更を先導する人が開発者数人を選び出す
    • その種の問題を考え抜くことを得意とする人
    • ドメインの中の該当する領域に精通してる人
  2. このグループで30分から1時間半のブレインストーミングを行う
    • UML図のスケッチ
    • オブジェクトを使用してシナリオのウォークスルーを試す
    • 主題に関するエキスパートが、モデルを理解して役に立つと思っていることを確認する
  3. コーディング。もしくは数日考えることにして別の作業をする
  4. 数日後再びウォークスルー
    • それまで考えたことを寝かせているから、初期段階よりも結論に至る可能性が高い
  5. コーディング

探究のプロセスを生産的なものに保つポイント

  • 自主的な意思決定
    • 少人数であれば小回りが利く。
  • スコープと休憩
    • 数日の間隔をあけて短いミーティングを数回やれば、試す価値のある設計が作り出せるはず(長引かせる意味はない)
  • ユビキタス言語の駆使

リファクタリングのタイミング

リファクタリングは、先延ばしにすると変更するのがより困難になる。 下記の場合にはリファクタリングしてしまうこと。

  • 設計が、ドメインに関するチームの現在の理解を表現していない。
  • 重要な概念が設計で暗黙的になっている(そして、どうすれば明示的にできるのかまでわかっている)
  • 設計において重要な部分を、よりしなやかにするチャンスがある

ただ、リリース前日だったり、ドメインエキスパートを納得させられなさそうな時にはリファクタリングすべきでない。

その他諸々のメモ

思ったこと・気になったこと

参考