【50】アーキテクトは境界とインターフェイスに注意を注げ

アイナー・ランドル

 1805 年にネルソン提督がフランス、スペイン連合艦隊を打ち破って以来、「分割統治」は複雑で困難な問題に取り組むための合い言葉になっています。同じことをもっとわかりやすく言うと、問題の分割ということです。問題の分割はカプセル化を実現し、カプセル化は境界とインターフェイスを生み出します。

 アーキテクトの立場から見て難しいのは、適切なインターフェイスを定義し、自然に境界線を引ける場所を探すことですが、これらは稼働するシステムを構築するためには是非とも必要なことです。「結合度を下げ、凝集度を上げよ」とか「密接な情報交換が必要とされる領域をスライスするな」といった古くからの知恵は、確かにある程度のヒントを与えてくれますが、利害関係者に問題と解決案をわかりやすく説明するためには何の役にも立ちません。

 ここで役に立つのは、エリック・エバンスが『ドメイン駆動設計』で述べているコンテキスト境界、コンテキストマップの概念です。コンテキスト境界は、モデルやコンセプトを一意に定義できる領域で、雲または風船で表現し、ドメインの中での役割や任務をわかりやすく示す名前を与えます。たとえば、出荷システムには、荷役作業、輸送日程策定、港内輸送などのコンテキストがあります。他のドメインでは、別の名前を使うことになるでしょう。

 コンテキスト境界がはっきりしてホワイトボードに描けたら、今度はそれらのコンテキストの間の関係を描いていきます。組織的、機能的、技術的な依存関係を表現するのです。この関係が明確になると、境界のはっきりしたコンテキストとそれらの間のインターフェイスのコレクションであるコンテキストマップが完成します。

 このようなコンテキストマップは、アーキテクトにとって強力なツールになります。アーキテクトは、何をいっしょに扱い、何を離しておかなければならないかをはっきりさせ、説明しやすい形でうまく分割統治を進められるようになります。このテクニックは、現状をドキュメント、分析するために簡単に利用でき、さらに疎結合、高凝集、明確なインターフェイスという特徴を持つよりよいシステムに向かって設計を改良するためにも役に立ちます。