部分的なドメインモデル

ドメインモデルの設計では、あまり機能面の観点で分離することを言及することは少ないと感じるのですが、実際には機能単位やユースケース単位に開発担当者が割りあてられることが多く、機能面で分離できないと多くの開発者がコードを共有する必要があり、開発チームが複数に分かれる規模の開発で適用できなくなってしまう。

このような時は、特定の1つまたはいくつかの機能やユースケースの範囲でメインモデルを作成して利用する方法がお勧め。

この方法のメリットとしては、並行開発はもちろんですが、機能ごとでにドメインモデルの範囲を恣意的に調整できるため、ドメインモデルの複雑度も調整しやすいというか対象範囲が狭くなる分単純化できる点もある。

先程の貸出数の実装においても、双方向の依存を解決する目的は単純化が目的ですが、双方向の依存が特定の機能で限定できるのであればわざわざ解決しなくても良いということになる。
また、関連する貸出を貸出中の状態だけに絞り込むようなことも可能になる。機能を限定しないとこんなことはできないよね。

ちなみに、ロールはある意味特定の範囲での役割なので、この部分的なドメインモデルの考え方のひとつと捕らえることができるかもしれない。

なおこの方法のデメリットはもちろん共通化が阻害される点、並行開発と共通化の両立ってやっぱり難しいですよね。