ドメインモデルと永続化


オブジェクト指向言語で作るなら、オブジェクト指向で設計するのが一番いいのだ」みたいな話には、何か証拠があるのだろうか。
多態性をまったく使わないとか、極端なのは論外としても、「設計がよりオブジェクト指向的であれば、よりよい設計」ということになるのだろうか。
言語は要素技術にすぎない。
要素のレベルで最適化して最良の結果が出るなら、「RDBを使っているのだから、リレーショナルモデルで設計するのが一番いいのだ」と言ってもいいことになる。
だったら、JavaRDBでシステムを組むときの最良の設計方針はどうなる?


業務システムは非オブジェクト指向設計(ファウラーのいうドメインモデルを構築しない設計)の方がいいんじゃないの、という話を時々目にする。
1年ぐらい前、アークランプさんのところでこの話がエントリされ、「いや、絶対オブジェクト指向で設計するのがいいのです。例えばフォントをモデル化するとしましょう...」みたいなコメントが付いて、何でフォントの話になるの?とびっくりしたことがあったが、業務システムにあってフォントにないもの=RDBが設計方針に影響してしまうのだろう。


多分、ドメインモデルというアイデアのアキレス腱は永続化にある*1
ファウラーの エンタープライズ アプリケーションアーキテクチャパターン (Object Oriented SELECTION)ドメインモデルの章の最後には、こんなことが書いてある。
正直びっくりした。

例では、オブジェクトがデータベースからどのように取得され作成されるかについて一切触れていないが、
それにはいくつかの理由がある。まず、ドメインモデルをデータベースにマッピングするのは通常難しい
ので、ここでは例を紹介しない。次に、多くの点でドメインモデルでは、上位レイヤやドメインモデルで
作業するユーザからデータベースを隠すことに意義がある。

「ユーザからデータベースを隠すことに意義がある」というのも、すごい発言だ。
うーん。どんな意義でしょう。

*1:ていうか、永続化はドメインモデルという設計パターンの視野の外にある。そもそも責任範囲外なのだから、それを「アキレス腱」とかいうのは言いがかりとも言える