モデリングとエンコーディング
ビジネスドメインの抽出および形成(モデリング)と、それをコードに落とし込む作業(エンコーディング)は別もの
それぞれ、本質的複雑さと偶有的複雑さに対応
ドメイン駆動設計の理念の一つにはドメインモデルとコードモデルの一致があるが、以下のような理由から混乱を招いている
モデリングとエンコーディングのテクニックが混同される
言語の表現力の制限に引っ張られる
ここまでのドメインモデルの記述は実装には依存しない世界の話です。当然ながらソフトウェアとして実装する上では、実装言語の制約や効率などを考慮し、1対1でクラスやメソッドに「エンコーディング」する必要はありません。見つけた「複雑さ」を適切な境界を実装し、カプセル化・関心の分離をはかることになるでしょう。
ここで重要なのはビジネスドメインからコードにいくまでのプロセスは、本質的複雑さにどう対処するかを考える「モデリング」と偶有的複雑さにどう対処するかを考える「エンコーディング」が存在するということです。
Runnable Specifications参照
ドメイン駆動設計は、ここでのドメインモデルとコードモデルをできるだけ一致させるのだ、を理念として掲げているわけですが、モデリングとエンコーディングの技術が混同して語られたり、実装言語の表現力や制約などによって一致させるのが難しい面も多くあったり、混乱が見られることもあります。
古典ドメインモデリングパターンの解脱 - 大吉祥寺.pm