5

私は本当に明白な何かを見逃していると思いますが、ドメインオブジェクトとリポジトリを介したそれらの永続性について多くの意見の相違があるため、これについて明確な答えを得るのは難しいです。

仮定して

  • DDDがクリアルートアグリゲートを1つだけ持つと述べているように、ソリューション内の他のアセンブリに依存しない純粋なドメインモデルを構築しました。

  • サービスレイヤーによって呼び出されたルートアグリゲートを永続化するドメイン固有のリポジ​​トリがあります。

  • 内部的には、リポジトリはEFを使用して、オブジェクトとその子を永続化します

ゲッターを公開しない場合(そしてセッターではない場合)、実際にオブジェクトを永続化するために、リポジトリはどのようにしてオブジェクトの状態にアクセスしますか。

オプション??

  1. ドメインモデルへの依存性注入(DDDの匂い??)

  2. ゲッターのみ(DDDの匂い??)

また、DBからオブジェクトを引き出すという逆の問題もあります。コンストラクターによる初期化が唯一の可能性のある候補のようです。

4

2 に答える 2

2

ORMは、リフレクションを介してオブジェクト内のデータにアクセスできます。たとえば、NHibernateには、マップされたクラスがゲッターやセッターのないプライベートフィールドのみを持つことを許可するプロパティへのさまざまなアクセス戦略があります。EFにも同様の設備が必要だと思います。

于 2013-03-05T03:24:51.697 に答える
2

eulerfxが述べているように、ORMを使用しているので、ORMが提供するものを使用する必要があります

私はORMを積極的に使用することは決してないので、私の経験は多少制限されますが、ORMが何らかの形でオブジェクトモデルに組み込まれるという点で問題のようです。場合によっては、特定の方法でクラスを設計する必要があります。

そうは言っても。オブジェクトを永続化するには、その状態が必要です。オブジェクトを水和させるには、その状態を提供する必要があります。そのビットを回避する方法はありません。ツールにゲッターとセッターが必要な場合は、そうしてください。

オブジェクトによって公開/消費されている状態オブジェクトがある可能性があり、意図がいくらか明確であっても、問題を移動するだけです---しかし、おそらくそれはより良いです:)。

イベントソーシングを使用する場合でも、イベントには状態が含まれており、オブジェクトを最後の状態に戻すためにオブジェクトに適用する必要があります。または、状態オブジェクトとまったく同じスナップショットを使用することもできます。

パブリックゲッターとセッターは悪用される可能性がありますが、それはそれが何であるかです。

于 2013-03-05T04:22:23.157 に答える