ドメインとは領土のことである. 境界があり, その中では, 通貨, 言語, 文化, 風習などが統一されている. が, それらはその境界の外部とは異なっており, その境界をめぐってしばしば争い, 戦いが起こる.
「統一されている」ということは, たいていの場合, 誰か (何か) の力によって支配されているということでもある. 実際 「支配する (dominate)」と「領土 (domain)」は語源を同じくしている.
かつてウォータフォールもどきと機能詳細化設計もどきがはびこっていた某国某業種の多くの現場で最近はびこっているのがスクラムもどきと「ドメイン駆動設計」(DDD) もどきらしいと風の噂に聞くことがある.
ドメイン・エンジニアリングの考え方は古く 1990 年代から存在し, 広く使われてきた. オブジェクトの文脈でも Smalltalk に端を発する文化では, CRC (Class - Responsibility - Collaboration) を始めとして, ドメインをベースとしてソフトウェアを作るのは当たり前のことだった.
ここでいう「ドメイン」はアプリケーション・ドメイン (作ろうとしているソフトウェアが対象とするアプリケーションやビジネスの領域. 対象ドメインとも呼ぶ) のことで, Smalltalk 系のオブジェクト文化では通常, ドメインに存在する概念を「そのまま」オブジェクトとしてソフトウェア化する. この「そのまま」に引っ掛かったひとも多いだろう (もちろん「そのまま」ソフトウェアになるわけはない. いくつもの知的/身体的変換過程を経てマッピングするのである).
Eric Evans が DDD を書いた (原著 2003, 邦訳 2013) のは, ドメインをどうやってその当時のソフトウェア・エコシステム (Java, JavaEE, ... などのようなもの) にマッピングするかという, 彼なりの, そして彼の対象ドメインなりのヒント集 (パタン言語) に過ぎない. だから当然, 技術が変わればマッピングも変わる, ドメインが異なればマッピングも変わる, ソフトウェアを作る主体が変わればマッピングも変わるのである. そして, 邦訳がようやく出版された 2013 年でさえ, Eric Evans の DDD はいささか古色蒼然としていた.
まして今や, それからさらにほぼ 10 年を経た 2022 年である. 技術は大きく変わった. 対象ドメインはそもそもソフトウェアごとにさまざまであるはずだが, 対象ドメインそのものも, 対象ドメインに対する見方も変わったろう.
だから, 「ドメインから始める」というスローガンさえ理解したら, Eric Evans の DDD は忘れよう.
DDD の巻頭に掲げられた「構成要素」の図で言えば, 「ユビキタス言語」と「モデル駆動設計」以外は全部忘れてよい. そして一つだけ, 「メタファ」を付け加えるのが良いと思う. Kent Beck の Extreme Programming (XP) の初期のバージョンにあった (そして, あまり評判のよくなかった) 「メタファ」だ.
準備ができたら, 旅に出よう. 自分たちのドメインを訪ねる旅に.
我々は今どこにいるのだろうか? 我々がいるのは, テクノロジというドメインだ. 我々はまず自分たちのドメインについてもっとよく知らなければならない. 前回の旅から 10 年, 20 年たった今, 我々のドメインは, そして世界はどう変わったろうか?
次に考えなければならないのは, 「対象ドメイン」と呼ばれるドメインをどうしたいのか? だ.
典型的なあり方は, 我々のドメインと対象ドメインが対等な立場で付き合うやり方だ. そのとき, 我々は二つのドメインを行き来し, その二つのドメインの良き外交官, 通訳, 翻訳者, 旅人となることだ.
さもなければ, 我々のドメインが対象ドメインに服従するのか, 我々のドメインが対象ドメインを呑み込んで一つの巨大なドメインを作り出すのか.