「わかる!ドメイン駆動設計〜もちこちゃんの大冒険〜」を読んだ
わかる!ドメイン駆動設計〜もちこちゃんの大冒険〜を読む。 社内のアーキテクチャや設計はDDD的な要素が入っているので知らないままではいられない。
DDD
- Domain Driven Development(ドメイン駆動設計)
DDDでやること
- 開発者とドメインエキスパートがドメインモデルを作る
DDDのメリット
- ドメインエキスパートと開発者を同じ土俵に乗せることで、プログラマーの視点だけでなく業務側の視点も入れられる
- ソフトウェアを理解している人を一部だけという状況をなくせる
- ドメインエキスパートとソフトウェア開発者、そしてソフトウェアそのものとの一切の通訳が不要になる
- 設計がコードであり、コードが設計になる
- 知識の継承、ビジネス要件に伴う機能変更にすばやく対応できる
DDDの要素
戦略的設計
と戦術的設計
に分類される- 戦術的設計だけでもDDDの恩恵は受けられるが両者が組み合わさったときのような大きな利益は生まれない
ユビキタス言語
- ユビキタス言語とは、ドメインエキスパートやソフトウェア開発者を含めたチーム全体で作り上げる
共通言語
のこと - ユビキタス言語の見つけ方
- ユビキタス言語
- 一度決めたらそれっきりではなく、ユビキタス言語も育っていく
ドメインモデル
- ドメインを反映したモデル
- 名前・関係性・振る舞いなどが表現されていて、チームメンバー全員が同じものを思い浮かべるもの
- DDDでは設計がコードであり、コードが設計である
- ドメイン、ドメインモデル、ソフトウェアモデル、オブジェクトモデルの関係性
ドメインモデル貧血症
ドメインとは
- ドメインとは業務に関連した領域
- ソフトウェアには適用する業務領域があるが、個々の機能や構成を見ていくと複数の
サブドメイン
に切り分けられる
境界づけられたコンテキスト
- ドメインモデルがどこに属するかを表すもの
- 新規のプロジェクトなどは1つのサブドメインに対して1つの境界づけられたコンテキストになるが、そうではないケースもある
- 境界づけられたコンテキストのサイズを間違える原因として多いもの
- 言語的な境界ではなく技術的な境界を考えてしまっている
- チームの開発要員へのタスクの割当を考慮してしまっている
コンテキストマップ
- 境界づけられたコンテキスト間の関係性を描いたもの
- 注意点
- 境界つけられたコンテキスト間には下記のような関係がありうる
感想
- DDDについて今まで実装の話を少し読んでみたりしてピンとこなかったのがとても身近になったしDDDを本格的に学ぶモチベーションが上がった!
- 前の職場では、エンジニアと非エンジニアが違う言葉使っているというのはあったな、と思った。それが原因で意思疎通に支障が生じることもあったと記憶している。ユビキタス言語を育てる、ということを取り入れるだけでもいいコミュニケーションにつながりそう
- まだ先は長そうなので頑張ろうと思う
- 次は下記資料の1番上のドメイン駆動設計の要約を読む
他のドメイン駆動設計のよさげな資料
- ドメイン駆動設計の要約
- 要約が無料ダウンロードできる!!
- この本を読んだ後に読むといいよって教えてもらった
- エリック・エヴァンスのドメイン駆動設計
- 原典
- 難しいけど読む度に発見がある名著だから取り組むべきらしいので
- 実践ドメイン駆動設計
- エリック・エヴァンスより平易らしくこれもマストらしい
- little hands' lab
- ドメイン駆動設計を広めている方のブログ。コードもあってわかりやすい