質問

このアンチパターンとSOに関する多くの懸念について読んだ後、再び混乱している。

ドメインモデルがあり、データ転送オブジェクトに保持する必要があるデータをキャプチャする場合、ドメインモデルがデータのラッパーになりますか?その場合、貧血領域モデルを使用します。しかし、そのラッパーに十分なドメインロジックを追加すると、どの時点でそれが実際のドメインモデルになりますか?

ドメインモデルに永続化する必要があるものをキャプチャすると、グッドプラクティスに違反し、貧弱なドメインモデルのアンチパターンが作成されるという印象を受けます。ただし、リレーショナルDBを使用する場合、オブジェクトの状態を作成して保存する部分を選択することを避ける方法はありません。

概念についてかなり混乱しているので、自分が書いたものが理にかなっているかどうかはわかりません。明確に質問してください。

役に立ちましたか?

解決

ビジネスドメインを構成するすべて(またはほとんど)の動作を含む場合、「実際の」ドメインモデルになります(注: UIやその他の直交的な懸念事項ではなく、ビジネスロジック)。

ユビキタス言語を使用しており、ドメインの専門家から一定のフィードバックを取得している場合は、あなたが正しい軌道に乗っています(専門家はドメインモデルを見たときにうなずくはずです)。これらのことを行っていない場合、DDDを行っていません( Eric Evansが語っています)。

DTOの要点:それらを無視しないでください。実装の観点からは、レイヤー/ティア間でデータをフェリーするためにそれらが必要になります。 DTOと真のドメインオブジェクトをどのように組み合わせるかは、実際に使用しているテクノロジーによって異なります。

以前の回答で示唆されたように、おそらくデータ持続性に焦点を合わせていると、 true ドメインモデリングから気が散ることになります...

他のヒント

興味のある2つのアイテムが思い浮かびます:

  • データ転送オブジェクト(DTO)はドメインオブジェクトとは異なります。それらは、アーキテクチャの異なる場所で異なる目的を果たします-それらを混同しないでください。ドメインオブジェクトは、高い凝集性を備えたリッチAPI を提供します。 DTOは、アプリケーションの外部インターフェイスで使用されるパッシブデータ構造です-UI ViewModelとよく似ていますが、ユーザーではなく自動システムを対象としています。
  • 永続的無知を採用できるORMを選択した後、努力します。つまり、ドメインモデルを無制限に定義し、ORMにオブジェクトをリレーショナルデータベースにマッピングさせるだけです。
  

しかし、そのラッパーに十分なドメインロジックを追加すると、どの時点で実際のドメインモデルになりますか?

無計画な方法で物事を追加することでドメインモデルに到達することは可能ですが、確かにドメイン駆動設計ではありません。 (これはあまり役に立たないことはわかっています。私は自分自身を非常にデータ中心に考えている傾向があり、場合によってはこの観点から自分自身を引き抜くために実際の努力が必要です。)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top