ドメインモデルは難しい?

マーティン・ファウラーのPatterns of Enterprise Application Architecture(PofEAA) と Eric Evans の Domain-Driven-Design(DDD) のおかげで、最近はドメインモデルという言葉が結構一般的に使われてきているような気がします。

(以降、ドメインモデルという用語については、PofEAA と DDD の内容を前提とします)

しかし、実装の視点が入り込みすぎて、ユビキタス・ランゲージどころか、開発者でさえ理解し難い奇妙奇天烈な自称ドメインモデルを何度か見かけたことがあります。

現状でも、おいらの周りでは、「ドメインモデルは難しい」という声がよく聞かれます。

おいらは、オブジェクト指向によるモデルが難しい場合、結論は以下の2つに集約されると思っています。

1つめは、問題領域(ドメイン)がオブジェクト指向に向かない場合です。この場合は、別の方法でモデリングをしたほうが良いでしょう。(しかし、通常の業務システム開発であれば、このようなケースはほぼ皆無と思われます。)

2つめは、モデリング技術が不十分の場合です。問題領域が複雑でなければ、トランザクションスクリプトのような別方法を考えたほうがよいかもしれません。

この2つめに関しては、強力な落とし穴があるので、要注意です。「あの人のレベルは高くてついていけないよね〜」という評判のエンジニアは、ドメインモデリングに向いていない可能性が高いです。「あの人はわかりやすく説明してくれるよね〜」という評判のエンジニアなら、多分OK。

ドメインモデリングに関する技術力は、その他の技術力との相関関係が希薄です。必要条件は、直感をどれだけ重視するかや、周りの人に理解してもらうことを重視する姿勢であり、多少不恰好でも、関係者全員が理解可能なモデルであれば十分です。モデルに多少の問題を含んでいても、段階的詳細化の過程で明らかになるので、そのときに対応すればすむことです。

残念ながら、これらの技術条件は、見えるものでも数値化できるものでもありませんが、判断方法はあります。

すでに作成されたモデルがあるならば、それが簡単に理解できるかどうかを判断すればよいし、もしくは、モデル作成中に会話をして、わかりやすく説明してもらえるかを判断すればよいだけです。


結論:適切なドメインモデルであれば、理解するのは簡単(なぜなら、難しく感じられる場合は適切なドメインモデルではないから)