DDD / Published Language


DDD

公表された言語 (P375)

担当は本間(id:hiratara)です。

要約

公表された言語

二つのBOUNDED CONTEXTを通訳するには共通語が必要。

***

二つのドメインモデルが共存して情報をやり取りしなければならない時、翻訳は複雑で文書化したり理解するのは難しい。新しいシステムを作る時は自分たちの新しいモデルに直接翻訳するだろうが、古いシステムの場合は汚いモデルを選ばなければならないこともあるだろう。

また、会社間で情報をやり取りする場合、どちらかのドメインに合わせるのは現実的じゃないし望ましくもない。そのようなシステムのモデルは不要で複雑な通信機能を持たねばならないし、コミュニケーション媒体として利用される側のシステムは新しい要求があっても簡単に変えることは出来ず、通信手段としての役割を安定して果たさなければならない。

直接ドメインモデル間で翻訳をするのはいい解決法ではない。そういうモデルは複雑で分離しにくい。文書化はされないだろう。交換言語として使われている側は、本質的に凍結され、新しい開発要求には答えられない。

OPEN HOST SERVICE は複数の団体で標準化されたプロトコルで、通訳を行うためのドメインのモデルを使っている。そこからさらに踏み込んで、その言語を公開するか、すでに公開されている言語を探す。「公開」とは、興味があるコミュニティが簡単にその言語を利用でき、独立した翻訳が準拠できるよう十分に文書化されてることを指す。

XMLはデータ交換を容易にし、DTDやXML Schemaによって翻訳できる特化されたドメイン言語を定義できる。化学式や遺伝子構造が多くの組織でやり取りできるように、業界は標準DTDを定義するため集まり出している。本質的には、これらのグループは共有されたドメインモデルを言語を定義することで作ってる。

Therefore:

よく文書化された、伝達の標準の媒介となるドメインに必要な情報を表現した共有言語を使いなさい。そして、必要に応じてその言語へ、その言語から、翻訳する。

言語はスクラッチから作るべきではない。筆者はSmalltalkのシステムをDB2からBtrieveと言う軽量で無料ライセンスがあるDBに切り替える仕事をした。Btrieveは完全にリレーショナルではないが、ユーザはDB2の力の一部しか使っておらず二つのDBの最小の共通分母に収まっていた。開発者達はオブジェクトの保存についてDB2のの抽象化を行っていたが、筆者は自前のBtrieveインタフェースを使うことを決めた。

このアプローチはうまく行き、ユーザのシステムにズムーズに統合が出来たが、ユーザのオブジェクト永続化の抽象化に関する文書が不足していたため、新しいコンポーネントの要件を明らかにするため多くの作業が必要だった。DB2からBtrieveに移すにあたって、コンポーネントの再利用もほとんどできなかった。そして、新しいソフトはユーザの永続化モデルに不覚結合したため、永続化オブジェクトのモデルのリファクタリングはより難しくなった。

よりよい方法は、DB2のユーザが使っているサブセットを定義し、それらをサポートすることだったかもしれない。DB2のインタフェースはSQLで多くのプロトコルがあって複雑だったが、完全にドキュメント化されていたし小さなサブセットだけが使われていたので複雑さは和らげられた。コンポーネントがDB2のエミュレートだけで作られていれば、DB2のインタフェースのサブセットを示すだけで効果的に文書化することができた。アプリケーションはDB2とどう話すか知っていたので、やるべきことは少ししかない。永続化層のリデザインについても、エンハンス前と同じように、DB2のサブセットを使うと言うことにしか縛られない。

DB2インタフェースはPUBLISHED LANGUAGEの例だ。二つのモデルはビジネスドメインではないが、方針は同様に適用できる。片方のモデルがすでにPUBLISHED LANGUAGEなので、第3の言語を導入する必要はない。

P.377 例) 化学でのPUBLISHDE LANGUAGE

工場や研究所のプログラムではでは様々な化学式が使われているが、それを表現するドメインモデルが異なっていたりFORTRANのように十分にモデルを表現できない言語で書かれていたりするためにデータの交換はいつも大変だった。

XMLの方言で、このドメインの交換に使われる公用語であるCMLが、工場や研究所を代表するグループによって開発された。

化学式は複雑であるし新しい発見があれば変わるので、グループはCMLを有機物無機物の分子の化学式やタンパク質、スペクトル、質量など基本的な情報を記述できるように設計した。

言語が公開されれば、一つのデータベースでしか使えなくて書く価値がなかったようなツールが開発されるかもしれない。一例として、JUMBO BrowserのようなCMLの化学式を視覚化するが開発されており、CMLでデータを吐けばこのような視覚化ツールを利用できる。

CMLは、公用メタ言語であるXMLを利用することで、XMLを知る人が簡単に学習でき、既存のツールを利用することによる実装の容易であり、多くのXMLについて書かれた本によって文書化の手間を省ける等の利点も得ている。

CMLのサンプルは素人にはぼんやりとしか理解できないが、その主義ははっきりしている。

担当者のつぶやき

みんなの突っ込み



まとめ (議事録)