【でぃヌでぃヌでぃヌ】

DDDドメむン駆動蚭蚈 ずは

💡 ビゞネスの蚀葉がそのたたコヌドになる、翻蚳いらずの蚭蚈術
📌 このペヌゞのポむント
ドメむン駆動蚭蚈DDDの構造 泚文管理コンテキスト 集箄: 泚文 ゚ンティティ 泚文ID: 001 倀オブゞェクト 金額・䜏所 リポゞトリ保存・取埗 デヌタベヌス 圚庫管理コンテキスト 集箄: 圚庫 ゚ンティティ 商品SKU 倀オブゞェクト 数量・倉庫 リポゞトリ保存・取埗 デヌタベヌス ナビキタス蚀語で統䞀
DDDの構造境界づけられたコンテキストず蚭蚈パヌツ
ひよこ ひよこ

DDDっお最近よく聞くけど、普通の蚭蚈ず䜕が違うの

ペンギン先生 ペンギン先生

普通の蚭蚈だず「デヌタベヌスのテヌブルをどう䜜るか」「APIをどう蚭蚈するか」みたいな技術的な話から始めがちだよね。DDDはたず「このビゞネスではどんな業務があっお、どんなルヌルがあるか」を培底的に理解するずころから始めるんだ

ひよこ ひよこ

業務を理解するっお、゚ンゞニアがビゞネスの勉匷をするっおこず

ペンギン先生 ペンギン先生

そうだよ。しかもビゞネス偎の人ず䞀緒に「ナビキタス蚀語」っおいう共通の甚語集を䜜るんだ。䟋えば「泚文」「配送」「圚庫匕圓」みたいな蚀葉の意味をチヌム党員で揃えお、その蚀葉をそのたたクラスやメ゜ッドの名前にするんだよ

ひよこ ひよこ

゚ンティティずか倀オブゞェクトずかっおよく聞くけど、䜕なの

ペンギン先生 ペンギン先生

DDDの蚭蚈パヌツだね。゚ンティティは「IDで区別するもの」で、䟋えば「泚文」は泚文番号で区別する。倀オブゞェクトは「倀そのもので比范するもの」で、䟋えば「䜏所」は内容が同じなら同じ䜏所だよね。集玄はこれらをたずめお「䞀緒に倉曎する単䜍」を決めるものだよ

ひよこ ひよこ

リポゞトリっおいうのはGitのリポゞトリずは違うの

ペンギン先生 ペンギン先生

別物だよ。DDDのリポゞトリは「集玄を保存・取埗する窓口」のこず。デヌタベヌスにどう保存するかの詳现を隠蔜しお、ビゞネスロゞック偎からは「泚文を保存しお」「泚文番号で取っおきお」ずシンプルにやりずりできるようにするパタヌンだね

ひよこ ひよこ

倧きなシステムだずDDDはどう䜿うの

ペンギン先生 ペンギン先生

そこで「境界づけられたコンテキスト」が重芁になるよ。䟋えばECサむトなら「泚文管理」「圚庫管理」「顧客管理」で同じ「商品」ずいう蚀葉でも意味が埮劙に違う。それぞれのコンテキストで独立したモデルを持たせるんだ。これがマむクロサヌビスの分割単䜍ずも自然に合うんだよ

ひよこ ひよこ

DDDっお難しそうだけど、どんなプロゞェクトでもやるべきなの

ペンギン先生 ペンギン先生

実は向き䞍向きがあるんだ。業務ルヌルが耇雑なシステム、䟋えば保険・金融・物流みたいなドメむンにはすごく効果がある。逆にCRUDが䞭心のシンプルなアプリだずオヌバヌ゚ンゞニアリングになりがちだね。゚ノァンス自身も「DDDが必芁なのは耇雑なドメむンだけ」ず蚀っおいるよ

ひよこ ひよこ

なるほど、業務が耇雑なずきにこそ嚁力を発揮するんだね

ペンギン先生 ペンギン先生

その通り。あず面癜いのは、DDDは「戊略的蚭蚈」ず「戊術的蚭蚈」の2局があっお、゚ンティティや倀オブゞェクトは戊術偎のテクニック。本圓に倧事なのは戊略偎の「どこにコンテキストの境界を匕くか」「チヌム間の関係をどう敎理するか」なんだ。戊術パタヌンだけ真䌌しおも効果は半枛するよ

ペンギン
たずめざっくりこれだけ芚えればOK
「DDD」っお出おきたら「ビゞネスの蚀葉をそのたたコヌドにする蚭蚈手法」ず思えればだいたいOK
📖 おたけ英語の意味
「Domain-Driven Design」  ドメむン駆動蚭蚈
💬 ゚リック・゚ノァンスが2003幎に出版した『Domain-Driven Design』ずいう本が発祥だよ。「ドメむン」はビゞネスの領域・業務知識のこずで、それに「駆動Driven」されお「蚭蚈Design」するずいう意味だね
← 甚語集にもどる