Conceptual Whole

IDDDで Conceptual Whole という便利な言葉を知ったので紹介する。

Conceptual Wholeは、値オブジェクト(Value Object)の特徴の一つだ。 「概念的な統一体」と日本語訳されているが、この言葉は意味がわかりにくい。 「概念のまとまり」とか「概念の単位」のほうが理解しやすいと思う。

1個以上の属性の集まりが、ある概念を形作るとき、その単位で値オブジェクトとして切り出すべきで、その単位をConceptual Wholeと呼ぶ。 概念を部分的にしか表現できなかったり、逆に概念の表現以上に不要な属性がついてしまってるときにはConceptual Wholeとは呼べない。

Conceptual Wholeは値オブジェクトを切り出す単位の基準として使える。 ユビキタス言語にマッピングされた概念を過不足なく表現できる属性の集合が、値オブジェクトとして切り出す単位として適切だと言える。

Conceptual Wholeとして適切な例を考えてみる。

プログラムの対象ドメインにとって意味のある(ユビキタス言語で名前付けできる)概念の単位で属性を集め、値オブジェクトとして切り出すのがConceptual Wholeの狙いだ。(値オブジェクトに限らず使えるテクニックだと思う。)

IDDDには以下のように書かれている。

各属性が重要なパーツとなり、それらが全体として、値について説明している。他と切り離して属性単体としてみると、意味のある内容がえられない。すべてが合わさって初めて、計測値や説明として意味をなすものとなる。これが、単にいくつかの属性をひとつにまとめただけのオブジェクトとは異なる点だ。単にまとめただけで、それ全体がモデル内の何かを的確に表しているのでなければ、まとめること自体にはあまり意味がない。

明快で力強い主張だ。

実践ドメイン駆動設計 (Object Oriented SELECTION)

実践ドメイン駆動設計 (Object Oriented SELECTION)