MENU

ドメイン駆動設計(DDD)って何?調べてみた

こんにちは、くまごろーです。
所属しているコミュニティのLT会に参加するのですが、自分の担当テーマが「DDD」になってしまいました。
今まで何度か聞いたことのあるワードですが、当然知識は全くありません。
スライド作りの準備を兼ねて、まとめてみることにします。
 
 
 
1 ドメイン駆動設計(DDD)を簡単に説明すると
 ドメイン駆動設計(Domain Driven Design)は、Eric Evansという人が提唱した設計思想らしい。
 
(1)DDDとはどんな設計思想なのか?

ドメインモデルをソフトウェア開発の中心にすえ、コードやコミュニケーションを常にドメインモデルと一体化させながら、ドメインモデルを反復的に深化させることでより価値の高いアプリケーションを生み出していこうとする考え方です。

[ 技術講座 ] Domain-Driven Designのエッセンス 第1回|オブジェクトの広場

ドメインモデル?深化?(-"-)
というわけでわからない単語を調べてみた。
 
 
(2)ドメインとは

ドメインとは、ソフトウェアが対象としている業務領域のことです。たとえば、会計ソフトであれば、会計処理の部分がドメイン領域ということになります。

業務知識を中心に考える設計手法ドメイン駆動設計の基礎知識 | プログラミング教育ナビ

システムに関する業務知識や、ソフトウェア化する対象(業務)のことをドメインと呼ぶみたい。
 

(3)ドメインモデルとは
ドメインに存在する概念(在庫管理の「倉庫」や「移動」等)を抽象化したもの。 ドメインに存在する本質的な振る舞いは、すべてドメインモデルに属する形でモデリングされる。
 

(4)上記をまとめると
こういうことかな?

  • 運用と共にモデルを改善・進化させ続けることで現実の業務とコードの一体化を進め、運用しやすいアプリケーションを作る

 
 
 
2 なんでDDDを導入するのか?

DDDを導入するとこういった利点があるみたい。

DDDを実践することで、ドメイン知識がそのままコードへ反映されるようになる
ドメイン知識とコードが地続きになることによって、変化に強いソフトウェアを構築できる

【2020年版】ドメイン駆動設計(DDD)初学者へ贈るおすすめ書籍 - RAKUS Developers Blog | ラクス エンジニアブログ

 
 
3 実際どういうことをするのか?

色んなページを調べてみたんだけど、超簡単にまとめるとこんな感じになるのかな?

(1) ドメインオブジェクトを見つける
   ・ ドメインエキスパートからのヒアリング・業務用語集の作成
   ・ 業務用語を図式化(業務知識を要約し、関係性を明らかにする)
   ・ ドメインを洗い出す
(2)コードに落とし込む
(3)運用と共にドメインを改善・洗練させていく

色々調べてみて、決まった方法があるわけではないという感じがしました。
こちらのページが具体的に書かれていてわかりやすかったです。



4 勉強して出てきた疑問
 
 
疑問1:DDDとMDD(モデル駆動開発)って何が違うの?

結論:「ドメイン」を中心にするか「モデル」を中心にするか

・MDDは「モデル」を元に行なう設計技法で、ドメインだけが適用範囲ではない。(モデルはUI等、純粋に技術的なものにも適用できる)
※ ただ、DDDはその実現方法の中心にMDDを採用している。(ドメインの複雑さを理解し、ソフトウェアに反映させる最善策はモデルを使うことであるというスタンス)

 
疑問2:DDDとオブジェクト指向はセット?
ここまで調べてみて、「DDDとはオブジェクト指向と同じなのかな?」と疑問が湧きました。
が、DDD(ドメインモデリングオブジェクト指向とセットではないようです。
ただ現実的には、MDDを実現できる最良のプログラミング手法がOOPであるために、OOPが積極的に使われているということです。
 
 
 

5 DDDを理解するのに必要そうな言葉

(1)ドメインエキスパート
ドメインエキスパート」とは、ドメイン領域に精通した人のことを指す。ドメイン」はソフトウェア化する業務領域のことを指すので、ドメインエキスパートは、実際にその業務を行う一般的にユーザーになることが多い。
DDDでは、開発に際しドメイン知識を得ることが非常に重要になってくる。知識の習得には、ドメインエキスパートとの会話・やりとりが欠かせない。ということは、DDDにはドメインエキスパートの協力が不可欠になる。この非エンジニアの協力が必要なことが、DDDの導入の大きなハードルとなることも多いらしい。

 

(2)ユビキタス言語
エンジニアとドメインエキスパートはドメイン領域の知識に差があるため、エンジニア側がエキスパートの話を正しく理解できず、誤解を招くことがある。これを解決するために必要なのがユビキタス言語ユビキタス言語とは、エンジニアとドメインエキスパート双方が理解できる共通用語である。ドメイン駆動設計では「ユビキタス言語」の一覧を作成する
 
 
 
6 最後に
 
かなり駆け足で調べてみました。DDDがどんな設計思想なのか、なんとなーくはわかりましたが、正直まだまだです。
1冊でも本を読んで、もっとしっかり勉強しなきゃと思いました(=_=)
原著が読めればいいんですが、明らかに難しそうなので初心者向けの書籍を探してみました。とりあえずこれを買ってみようかな?と思ってます。
www.amazon.co.jp

 

7 参考