ドメインモデル貧血症のコードをリッチ化してみる?まとめ

ドメインモデル貧血症のコードをC#の拡張メソッドを利用してリッチなドメインモデルのコードに近づけることができました。これはトリッキーな方法ではなく実用的な方法で、Active RecordやData Mapperと同じレベルのドメインモデル実装パターンと考えてよいと感じています。
導入の敷居が低い点が最もメリットに感じます。具体的な特徴として

  • ボトムアップのアプローチで、設計モデルが無くても実装段階で部分的に導入可能
  • データマッパーなどの特別な仕組みが必要なくトランザクションスクリプトに近い実装
  • 拡張メソッドにはレイヤ固有の処理を記述可能なのでDBアクセスする処理も記述可能

が考えられます。これはデータマッパーを利用して永続化処理とPlain Objectを分離するドメインモデルとは大きな違いですが、永続化処理と分離したドメインモデルの場合にはDBアクセス処理は記述しません。また、設計モデルでリッチなドメインモデルは設計している場合は、設計モデルからドメインモデルで実装するトップダウンのアプローチが基本になります。
この方式のデメリットは拡張メソッドでの限界で継承のような強力な仕組みを導入できない点です。しかし、逆にリッチなドメインモデルの敷居を感じるチームであればドメインレベルの継承をうまく使いこなせない可能性もありデメリットと感じないかもしれませんが。

拡張メソッドを利用した方法でJavaなどでは適用不可能な方法かもしれませんが、RubyなどのMIX-INを利用できる言語であれば適用可能で一般的なソリューションとしても十分使えると思っています。