ドメイン駆動設計の観点で 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” と呼ぶ。