ドメインオブジェクト

数日前に、Javaは長くやってきたのでオブジェクト指向は分る気がするとか大言壮語してしまった。今週、仕事でチームのメンバーと作ってるシステムのドメインオブジェクトについて議論することがあって、ドメインオブジェクトって物が分ってないことに気がつかされた。そんでDomain Driven Design(日本語)をよんだりしてます。

僕の問題は、ドメインオブジェクト同士の関係をメモリー上に作り上げる時に必要な操作を提供してくれるインフラ的なオブジェクトを、ついドメインレイヤーで考えがちということ。例えば、何かプロダクトを表現するドメインオブジェクトがあって、それの内容をバリデートするドメインオブジェクトを定義したとする。プロダクトのタイプが、適用されるバリデーターを決定するとする。このバリデーターをロードしたりするオブジェクトは、どっかに必要だけど、それは裏方であってドメインオブジェクトではない。例えば。その裏方のオブジェクトについてビジネス(ユーザー)側は理解できない。なぜなら、彼らのドメインに’バリデーター・ローダー’みたいな言葉はないから。

追記
上記を書いた翌日に、Domain Driven Design(日本語)リポジトリーの項を読んでいて、はて、自分の考えていたのはDDDでいうアグリゲートをリポジトリーから取り出すことではないか、とするとリポジトリーをドメインオブジェクトと考えるのもあながち悪くないのかもしれないが、と疑問がでてきた。