亀岡的プログラマ日記

京都のベッドタウン、亀岡よりだらだらとお送りいたします。

ドメイン駆動、モデル駆動、ドメイン特化型言語、オブジェクト指向設計

雑多なメモ。同期とだらだら話していて思っていたこと。
まあ、完全に頭でっかちで、本当に実践したことあるのはユースケース駆動開発くらいなんだけど・・・

ドメイン駆動とモデル駆動の違い

ドメイン駆動とモデル駆動は、まとめる対象が同じような塊になりがちなのでにたようなものと解釈されがちだが、出発点が違う

  1. ドメイン駆動
    1. 実現したい要求の記述方法として、「ユビキタス言語」というものを定義し、それを用いて記述する。
    2. 要求を的確に、かつ簡潔に記述するために用いる
  2. モデル駆動
    1. 機能実現の手段として「モデル」を定義し、それをもちいて実装方法を記述する
    2. 複雑過ぎる機能の抽象的表現手段として用いる

というように、出発点が異なるイメージ。
ドメイン駆動がどちらかというと要求理解とか機能記述とかの要求側から攻めているのに対して、モデル駆動は設計や実装がスタート地点となっている。

ドメイン駆動とローゼンバーグ

ローゼンバーグの「ユースケース駆動開発」はドメイン駆動と似たプロセスを辿る。ドメイン駆動開発が「ユビキタス言語」を定義しモデル記述していくのに対し、ユースケース駆動開発では「ドメインモデル」を最初に定義しそのドメインモデルを使ってユースケースを記述していく。
作る図は違うものの、ドメインの言葉を用いて顧客の要求を定義する、という観点においては同じゴールを目指しているような印象を受ける。

ドメイン駆動とドメイン特化型言語(DSL)

DDDとDSLは非常に近いような印象を受ける(僕もそうだった)が、実際は多少の乖離があるように思う。DSLはどちらかというとモデル駆動開発側で強い力を発揮するが、ドメイン駆動開発におけるドメイン記述言語(=ユビキタス言語)は、DSLにほどの明瞭性を持たないし、DSLのように自動コード生成までは意味しない。
ただ、ドメイン駆動で要求モデリングをしていれば、DSL記述が簡便にできるようになる(あるいは移行できる)という意味で親和性は高いように思う。

ドメイン駆動とオブジェクト指向設計

オブジェクトの中にはドメインも含まれると思う。つまり、ドメインモデルは「業務ドメイン」という縛り(あるいは判断基準)を設けたオブジェクト指向モデルなのではないかと感じた。なんでもかんでもオブジェクトとして捉えるんではなく、業務のひとまとまりというものを、オブジェクトを抽出する際に強く意識すれば、ドメイン駆動設計に近くなるのではないだろうか。