石橋秀仁(zerobase)書き散らす

まじめなブログは別にあります→ja.ishibashihideto.net

ドメイン駆動設計の観点で object/component/module の概念を整理

同じ「部品」の意味で、英語には “component” と “module” がある。その違いを考えた。なお、オブジェクト指向ドメイン駆動設計の観点である。

(以下の定義や解説は個人的な見解に過ぎないのであって、「言葉の意味の押し付け」と誤解されないよう願いたい)

定義

  • component は object の部分集合である (object ⊇ component)
  • module は component の部分集合である (component ⊇ module)
  • module は「元の context を離れて再利用できる component」である(実際に再利用したかどうかではなく、可能性の問題である)

解説

ドメイン駆動設計における「ドメイン」の特徴は固有性にある。汎用性ではない。

“module” には standard (標準)や dettach(取り外し)の意味が含まれる。

ゆえに、ドメインモデリングの結果として現れてくる「小さなオブジェクト」は、 まず component である。そのなかでも、元の context を離れて再利用可能なものは module である。

ここで “context” と「再利用」の意味を明らかにしておく。

  • 複数の構造 (composite) のなかに組み込まれうる部品を module と呼ぶ。
  • 実際に「元の composite とは異なる composite に組み込む」ことを「再利用」という。
  • 単一の構造のなかでしか利用できない部品は、module ではなく component と呼ぶ。

補足すると、ここでは「component の context」という言葉は、「component がどの composite に組み込まれているか」を意味している。

なお、 composite という context を問題にしない場合、その部品を単に “object” と呼ぶ。

資料