Martin Fowler は、Anemic Domain Model をアンチパターンと見なしています。
オブジェクト リレーショナル インピーダンス ミスマッチが原因で、ドメイン モデルとしての永続性モデルのローリングも大幅にオフになっているように見えます。永続性と正規化のために、クラスを非常に小さな断片に分解する傾向があります。これらのクラスの上にメソッドを平手打ちするのはばかげています。さらに、持続性はめったに変化しませんが、ビジネス ロジックはかなり変化します。
そのため、持続性モデルに基づいて構築された DomainModel が必要です (1 つの同じモデルではなく)。このドメイン モデルには、ビジネス ロジックのプロパティとメソッドが含まれます。
しかし現在、これらのドメイン モデルはまだサービスの背後にあり、それらを外部に公開するには、それらを DTO に変換する必要があります。
ここでは非常に多くのマッピングを行っています。
- ドメイン モデルへの永続性
- ドメイン モデルを DTO に変換してサービス間で受け渡すには
DTO を ViewModel にマップする必要がある場合があるため、これで終わりではありません。
クライアントはリアルタイムの検証を望んでいるため、これらすべてと検証ロジックの重複の問題は依然として解消されていません。ViewModel は検証について何も知らないため、たとえば SPA では、クライアント側で (通常は JavaScript で) 検証ロジックを再度書き直す必要があります。
また、サービスは本質的にステートレス (メッセージまたは RPC 指向) であるため、Persistence と OO との間でこれらすべてのマッピングを行い、次に Procedural に戻すと、どのような利点があるのでしょうか? ほとんどの IT 予算の実際的な観点から、コストをどのように正当化しますか?
Aggregate Roots、Domain Models などを備えた完全な DDD がいかに「クール」であるかはわかりますが、コストと開発の生産性への影響をどのように正当化できますか?
アンチパターン (またはアンチパターン) は、一般的に使用される可能性があるソーシャル オペレーション、ビジネス オペレーション、またはソフトウェア エンジニアリングで使用されるパターンですが、実際には効果がなく、非生産的です。
もしそうなら、DDD とリッチ ドメイン モデルは、「リーン」ドメイン モデルよりも上記のアンチパターンの定義に当てはまりません。申し訳ありませんが、私はロードされた単語「貧血」を軽蔑します.
ドメインモデルを「リーン」に保つことで、「抽象的な依存関係の原則」、「自分自身を繰り返さない」、およびあるデータキャリアを別のデータキャリアにマッピングするという時間のかかる退屈でエラーが発生しやすいプロセスに違反することなく、実際に共有することができます。そして、その上にある関連する単体テスト (単体テストなしでマッピングを行うことを考えていて、最善を期待している場合を除く)。