「ドメイン駆動開発」への素朴な疑問
半年ほど前「ドメインモデル」の考え方を調べるうちに、masuda220氏の「システム設計日記」にたどりついた。「Domain-Driven Design」(Eric Evans著, 2003)の精読を通じてドメイン駆動開発の意味や意義を検討している読み応えのあるブログである。興味をもって4月にmasuda220氏に直接会ってお話を伺うことができた。おかげでようやくこの考え方を理解できた(ような気になっただけなので、間違った理解をしているとしたら私の責任である)。同時に、以前からドメインモデルに対して抱いていた疑問もより明確になった。
「ドメインモデル」の「ドメイン」とは、ソフトウエアが支援する「個々の現実」を指す。その現実に含まれる用語を用いて、ソフトウエアに含まれる変数やクラスやメソッドを命名して組み立てた場合、その体系は「ドメインモデル」と呼ばれる。設計成果物も実装成果物も、出来上がるものがドメインモデルであるように組み上げられなければいけない。
なぜか。そのようにまとめられた体系は「ドメインのあり方を端的に表すモデル(システム定義)」となるからだ。この知識体系が設計・開発チーム全体の単一の言語体系(ユビキタス言語)となって、コミュニケーションが円滑になり開発効率が高まる。これがドメインモデルの主要な意義とされ、このような開発スタイルを「ドメイン駆動開発」と呼ぶ。「オブジェクト指向分析設計」の発展型でもある。
この考え方に対する私の疑問は2つある。まず、ドメインモデルが「オブジェクト指向とイパネマの娘」で説明した「発展途上型アーキテクチャ(図1)」を前提にしている点だ。ドメインモデルは最終的にプログラミング言語で記述されることになる。それが「ドメインのあり方を端的に示す、実行可能なシステム定義(c)」であるにせよ、なぜいまだに「プログラミング言語」での記述にこだわるのかが理解できない。なんのかんの言ってもプログラミングが手間隙のかかる作業であることは、誰もが知っていることなのに。
┌────────────────┐
| c.システム定義 |
┌─┴────────────────┴─┐
| a.プログラミング言語 |
└────────────────────┘
図1.発展途上型アーキテクチャ
それよりも、各ソフトウエア分野の特性に合わせて調製された「アプリケーションドライバ(図2のb)」のレイヤーを導入し、より高次の様式を用いてシステム定義(c)を記述できるようにすべきだ。そうすればシステム定義は「実行可能な仕様書」となるからだ。また、プログラミング作業が大幅に削減されるので、込み入った開発標準も、おおげさな品質・進捗管理体制も不要になるからだ。とくに似たり寄ったりのテーブルや機能群を十年一日のように開発している「バックオフィス向けソフトウエア」のように成熟した分野であれば、実現不可能な話ではない。このことを示すために私は、自作のアプリケーションドライバXEAD Driverで「CONCEPTWARE/販売管理」の実装を進めている。
┌────────────────┐
| c.システム定義 |
┌┴────────────────┴┐
| b.アプリケーションドライバ |
┌┴──────────────────┴┐
| a.プログラミング言語 |
└────────────────────┘
図2.成熟型アーキテクチャ
自作しているのでよくわかるのだが、オブジェクト指向を活用しない限り、アプリケーションドライバのような複雑なソフトウエアなど開発できるものではない。しかしいったんそれが出来上がってしまえば、個別案件においてオブジェクト指向は不要だ。そもそもオブジェクト指向プログラミングが後に続くからこそ、オブジェクト指向でシステムを構想することにも意味がある。個別案件においてプログラミングが要らなくなれば、オブジェクト指向のオの字も要らない。
このように、オブジェクト指向は個別案件を繰り返し扱う過程で巧妙に隠蔽されてゆく技術である。それゆえに、オブジェクト指向分析設計の発展形であるドメイン駆動開発には、ある種の危うさがつきまとっている。そんな気がしてならない。
masuda220氏も、ドメイン駆動開発の考え方がどんなソフトウエア分野でも有効な手法だとは考えておられなかった。「技術上の変化が激しいソフトウエア分野では有効なのでしょう」と彼は説明してくださった。たしかに技術上の変化が激しければ、アプリケーションドライバなど事前に用意できるものではない。そんな分野の案件では、システム定義をプログラミング言語でハードコーディングせざるを得ない。そんなニッチを狙ったソフト開発事業があってもいいし、タフであってもやりがいはあるだろう。
しかし、私の専門であるバックオフィス分野向けに、ドメイン駆動開発が有効だとはどうも思えない。その証拠に、販売管理や生産管理向けドメインモデルの実例が見当たらない。有効であるのなら、なぜ「ドメインのあり方を端的に示す、実行可能なオブジェクトモデルの実物(格安か無料であってほしいものだ!)」がいつまでたっても公開されないのか――というのが2つ目の疑問、それもたいへん素朴な疑問である。
| 固定リンク
この記事へのコメントは終了しました。
コメント