DDD / Unifying an Elephant


Unifying an Elephant 象を統一する (P378)

要約

6人の盲人が象を触って観察しようとした話。
1番目の人は、胴にもたれかかって「象は壁のようなものだ」と言った。
...
3番目の人は、鼻をつかんで「象は蛇のようなものだ」と言った。
4番目の人は、足を触って「象は木のようなものだ」と言った。
...
6番目の人、尾をつかんで「象はロープのようなものだ」と言った。
部分では正しかったけど、全体としては間違っていた。

盲人たちは、象の本質に合意しなくても、個々のモデルをもつことができます。象に対する見解を統合する必要がないのであればモデルが統一されないことは問題ありません。統合が必要な場合は、象の本質について合意していないということを認識するだけで多くの価値を得られます。少なくとも無意識のうちに意見の食い違いを避けられます。

分離されたBOUNDED CONTEXTを持てば、状況は明瞭になり、盲目の人たちが共通して関心をもつ部分(たぶん、それは象の場所)についてなんとかコミュニケーションできるようになります。(Figure 14.9)(Figure 14.10)

盲目の人たちがもっと情報を共有したくなるにつれ、ひとつのBOUNDED CONTEXTを共有することの価値が重みを増してきます。しかし、異なるモデルを統一することは困難です。だれも自分のモデルをあきらめず他のモデルを受け入れないということがあり得ます。つまり、尾に触った人は象は木のようではないと知り、そのモデルは意味を失い役立たなくなります。複数のモデルを統一することはほとんどいつも新しいモデルを作成することを意味します。

議論と想像により、盲目の人たちは、巨大な全体の異なる部分をモデリングしていたのだと最終的に認識できるかもしれません。統合の第一段階では、部分がどう関連しているかを認識することだけが求められます。たとえば、あるニーズに対しては、象は、木の幹に支えられ、一方にロープ、他方に蛇が結び付けられている壁とみることができます。(Figure 14.11)

同じものを異なった方法で見ている場合には問題です。2人の男が鼻を触って1人が蛇のようだと言いもう1人が消防ホースのようだというと、話が難しくなります。経験が矛盾するためどちらも他のモデルを受けいれません。つまり、彼らは蛇の生命と水を放出する機能を合体させる新しい抽象化が必要になります。

これまで部分を全体に結び付けてきましたが、できあがったモデルは洗練されていません。より深遠なモデルになるには、新しい洞察や新しい要求が必要です。象の例の場合、「木」の説は取り除かれ、「足」の概念へブレイクスルーするかもしれません。

モデルの統合の2番目のパスでは、それぞれのモデルの付随的または不正確な局面をはぎ落とし、新しい概念を作成します。ここでのケースでは、新しい概念は、「鼻」、「足」、「体」をもつ「動物」になります。それぞれの概念は独自のプロパティと他の部分に対する明確な関連を持ちます。成功するモデルの統合はだいたいにおいてミニマリズムで決まります。たとえば、不正確な毒牙の特徴を持つとするよりは水を噴出する能力が欠けているほうがいいのです。(Figure 14.12)

統合がさらに求められる場合、統一されたモデルは最初のバージョンで完全に成熟している必要はありません。後に、要求、理解、コミュニケーションによって、モデルは深められ洗練されます。

それぞれのモデルが適用されるコンテキストを明確に定めることで、それぞれのモデルの整合性を制御でき、また、モデル間に築きたいインタフェースの深い関係をはっきり理解できます。盲目の人たちは象の全体を見る方法をもちませんが、知覚の不完全さを認識すれば問題は制御可能なのです。

担当者のつぶやき

  • p.379の下から5行目で「knows」がイタリック体になっているのはなぜでしょう?

みんなの突っ込み


まとめ (議事録)