TAMALOG

プログラミングがあれば遠いところへ行けます。プログラムと人の共生を記録します。

DDD実践の現場の増田さんの話をまとめてみた

BPStudy#141〜DDD(Domain Driven Design)実践の現場 (2019/05/29 19:30〜) を聴講したときに、増田さんの発表がとても勉強になったのでまとめてみます。

簡単なこの記事のまとめ

  • DDDは「ソフトウェアの変更を安全に楽にする」ことが目的。振り切っている
  • DDDは、反復プロセスであって設計して終わりではない
  • 勉強には、増田さんの本を読んだあとに、エヴァンス本がおすすめ。ほかには教材(GitHubのコード)などが用意してあり誰でも参照できる
  • エヴァンス本は読みづらいが、コツがわかれば読みやすい

増田さんの資料

ドメイン駆動設計の正しい歩き方

DDDの目的

  • 進化するソフトウェアを手に入れる
  • 現実世界の変更に追従するソフトウェア
  • 動くだけではないソフトウェア
  • ソフトウェアの変更を安全に楽にする

もちろん、進化する必要のないソフトウェアもある。そういうものには不向き

ドメイン駆動設計の考え方

ソフトウェアの複雑さはビジネス活動の複雑さに由来する。ビジネス活動ではなく、 ビジネスルールがソフトウェアを作るときに影響してくる。

  • ビジネスルールとは、ビジネスの活動を駆動し、制約する約束事のこと。ビジネスをうまく回する制約のことだったり、ビジネス上の約束事だったりする。
  • ドメインロジック: ビジネスルールをコードで表現したもの

ビジネスルールをよく理解してモデリングするためには、ビジネス活動を継続的に学ぶ必要がある。ただし、コアとなるビジネス活動を見つけ出し、集中すること。闇雲にやり続けてはいけない。

DDDを実践するための問い

以下の問いを、DDD導入時だけでなく 継続的に問い続けること が重要

  • コアドメインに集中しているか
  • ビジネスを深く洞察しているか
  • ドメイン層を独立させているか
  • モデルと実装を密に結合しているか
  • システム間の秩序の改善を続けているか

脱線しがちなパターン

ビジネス活動から目をそらす
テクニカルな問題に対してとかに発生しがち。
全体を均質にカバーしようとする
すべてを値オブジェクトにしたくなってきたりするが、すべてそうするのは悪手。あくまでも本質を見出しそこを徹底的に改善していく
ビジネスを表面的にとらえて理解した気になる
表面的に捉えてからが本番なので油断してはいけない
ドメイン層に入出力の関心事を持ち込む
画面やテーブル単位で考えてコードを書くのは間違い。それは本質的になっていない。画面やテーブルがなくてもドメインモデルは育てられるし、テストだってできる
モデルと実装を切り離す
「実装がきれいになるから」などの理由でモデルと実装を切り離してはいけない。ソフトウェア変更時に苦しむことになるし、きれいになった気になるだけ。
システム間を力づくで連携させる
「相手方のインターフェースに合わせればいいや」となりがち。ビジネスにおける本来の連携を考えつづけ、改善し続けられるか?相手のシステムならこういうドメインモデルにしたほうがいいんじゃないか?と試行錯誤すること。

事例研究: ホテルの予約アプリケーション

  • DDDハンズオンでよく使っている
  • ほかのドメインを無視して(コアドメインを見つける)、料金計算を独立させる。それだけでテストできるように作っていく
  • DDDは、現実のビジネスルールから、モデリング、実装まで段階を踏んで終わりではない。何度も繰り返して改善するもの
  • ずっと紙とにらめっこしてしまうのは間違っている。コードに起こしてみて妥当性を確認する。何を軸にするにするか決めきれなくても、候補をすべてのパターンをコードに起こす
  • 上手く回るとコミュニケーションロスも減る

ビジネスを深く洞察するための問い

  • 中核となる料金ルールはなぜそうなっているか
  • 周辺の料金ルールはどういう意味か
  • 周りのシステムにどういう情報を渡すか。仕入れの管理ツールとの連携はどうあるべきか?

現場に導入するポイント

  • 想定読者の要件をクリアする(要件クリアは結構シビアだが、クリアするためのおすすめ書籍がある)
  • 28ページの抜粋版を読む
  • エヴァンス本をちゃんと読む(即効薬ではないが、じわじわ効いてくる)
    • この本は読みづらい。 読み方にはコツがある

教材

増田さんの意見

エヴァンス本を読むコツ

  • 紙を読んだほうがいい。流れがつかみやすい
  • 検索したいときは電子版が役立つ
  • 増田さんは、電子版と紙両方、それぞれ邦訳と原著を持っている(計4冊)
  • 実践で役立つテクニックは3部、4部にある

エヴァンスの文章スタイルに慣れる

章、セクションに共通して以下の流れがある。 無視して良い箇所があるので、見極めて読むと非常に読みやすい

  • 体験談: わけのわからない話が始まる。あとで読んでやっと理解できるため、最初は無視して良い
  • 設計課題と考えの説明: ようやく設計の考え方の説明。ここをじっくり読む
  • 他の事項との関連性の説明: 話が発散しがちなので一旦無視してよい

質問への回答

ドメインエキスパートが説明が下手だった場合どうするか?

  • ドメインエキスパートが説明が下手だった場合、「間違った具体例」を持っていく。そうすると喋ってくれる
  • ビジネスルールについては、バックオフィスの方が一番詳しい場合がある。「期日を過ぎたらどうなるんですか?」などの境界値となるケースに答えられるのは経理だったりする
  • スタートアップなどでエキスパートがいない場合、みんなで考えるしかない