DDD実践の現場の増田さんの話をまとめてみた
BPStudy#141〜DDD(Domain Driven Design)実践の現場 (2019/05/29 19:30〜) を聴講したときに、増田さんの発表がとても勉強になったのでまとめてみます。
簡単なこの記事のまとめ
- DDDは「ソフトウェアの変更を安全に楽にする」ことが目的。振り切っている
- DDDは、反復プロセスであって設計して終わりではない
- 勉強には、増田さんの本を読んだあとに、エヴァンス本がおすすめ。ほかには教材(GitHubのコード)などが用意してあり誰でも参照できる
- エヴァンス本は読みづらいが、コツがわかれば読みやすい
増田さんの資料
ドメイン駆動設計の正しい歩き方 from 増田 亨
ドメイン駆動設計の正しい歩き方
DDDの目的
- 進化するソフトウェアを手に入れる
- 現実世界の変更に追従するソフトウェア
- 動くだけではないソフトウェア
- ソフトウェアの変更を安全に楽にする
もちろん、進化する必要のないソフトウェアもある。そういうものには不向き
ドメイン駆動設計の考え方
ソフトウェアの複雑さはビジネス活動の複雑さに由来する。ビジネス活動ではなく、 ビジネスルールがソフトウェアを作るときに影響してくる。
- ビジネスルールとは、ビジネスの活動を駆動し、制約する約束事のこと。ビジネスをうまく回する制約のことだったり、ビジネス上の約束事だったりする。
- ドメインロジック: ビジネスルールをコードで表現したもの
ビジネスルールをよく理解してモデリングするためには、ビジネス活動を継続的に学ぶ必要がある。ただし、コアとなるビジネス活動を見つけ出し、集中すること。闇雲にやり続けてはいけない。
DDDを実践するための問い
以下の問いを、DDD導入時だけでなく 継続的に問い続けること が重要
脱線しがちなパターン
- ビジネス活動から目をそらす
- テクニカルな問題に対してとかに発生しがち。
- 全体を均質にカバーしようとする
- すべてを値オブジェクトにしたくなってきたりするが、すべてそうするのは悪手。あくまでも本質を見出しそこを徹底的に改善していく
- ビジネスを表面的にとらえて理解した気になる
- 表面的に捉えてからが本番なので油断してはいけない
- ドメイン層に入出力の関心事を持ち込む
- 画面やテーブル単位で考えてコードを書くのは間違い。それは本質的になっていない。画面やテーブルがなくてもドメインモデルは育てられるし、テストだってできる
- モデルと実装を切り離す
- 「実装がきれいになるから」などの理由でモデルと実装を切り離してはいけない。ソフトウェア変更時に苦しむことになるし、きれいになった気になるだけ。
- システム間を力づくで連携させる
- 「相手方のインターフェースに合わせればいいや」となりがち。ビジネスにおける本来の連携を考えつづけ、改善し続けられるか?相手のシステムならこういうドメインモデルにしたほうがいいんじゃないか?と試行錯誤すること。
事例研究: ホテルの予約アプリケーション
- DDDハンズオンでよく使っている
- ほかのドメインを無視して(コアドメインを見つける)、料金計算を独立させる。それだけでテストできるように作っていく
- DDDは、現実のビジネスルールから、モデリング、実装まで段階を踏んで終わりではない。何度も繰り返して改善するもの
- ずっと紙とにらめっこしてしまうのは間違っている。コードに起こしてみて妥当性を確認する。何を軸にするにするか決めきれなくても、候補をすべてのパターンをコードに起こす
- 上手く回るとコミュニケーションロスも減る
ビジネスを深く洞察するための問い
- 中核となる料金ルールはなぜそうなっているか
- 周辺の料金ルールはどういう意味か
- 周りのシステムにどういう情報を渡すか。仕入れの管理ツールとの連携はどうあるべきか?
現場に導入するポイント
- 想定読者の要件をクリアする(要件クリアは結構シビアだが、クリアするためのおすすめ書籍がある)
- 28ページの抜粋版を読む
- エヴァンス本をちゃんと読む(即効薬ではないが、じわじわ効いてくる)
- この本は読みづらい。 読み方にはコツがある。
教材
- エヴァンスのDDD本を読むための要件を満たすには、 現場で役立つシステム設計の教科書 を読むと良い。
- DDDサンプルコード: github.com/system-sekkei/isolating-the-domain
- 設計可視化ツール: github.com/dddjava/Jig
- 設計ガイドライン: https://github.com/masuda220/business-logic-patterns/wiki/%E8%A8%AD%E8%A8%88%E3%82%AC%E3%82%A4%E3%83%89%E3%83%A9%E3%82%A4%E3%83%B3
増田さんの意見
エヴァンス本を読むコツ
- 紙を読んだほうがいい。流れがつかみやすい
- 検索したいときは電子版が役立つ
- 増田さんは、電子版と紙両方、それぞれ邦訳と原著を持っている(計4冊)
- 実践で役立つテクニックは3部、4部にある
エヴァンスの文章スタイルに慣れる
章、セクションに共通して以下の流れがある。 無視して良い箇所があるので、見極めて読むと非常に読みやすい
- 体験談: わけのわからない話が始まる。あとで読んでやっと理解できるため、最初は無視して良い
- 設計課題と考えの説明: ようやく設計の考え方の説明。ここをじっくり読む
- 他の事項との関連性の説明: 話が発散しがちなので一旦無視してよい