2

私は現在、かなり大きな Web アプリケーションを開発中であり、ドメイン駆動設計を使用しています。

現在、製品エンティティへの変更を追跡する際に問題が発生しています。製品の一部は SQL Azure のデータから、一部は Azure Table Storage のデータから構築されます。特定のプロパティが変更された場合、両方に永続化する必要があり、他の変更は一方にのみ永続化する必要があります。

その結果、NHibernate または Entity Framework を使用して変更を追跡することはできません。たとえば、上の Price 引数

    public void AddPrice(Price price)

Product エンティティのメソッドを SQL Azure に永続化する必要があります。価格の範囲で計算が行われ、結果が Azure Table Storage に保存されます。

これをどのように解決しますか?

考え:

1) Castle.DynamicProxy に基づいて独自の変更トラッカーを実装することを考えましたが、それはかなり面倒です。

2) ドメイン エンティティの内部でイベントを実装します。これは良いことではありません。

4

2 に答える 2

1

1 つのエンティティを複数の永続ストアに分散させることは、適切な考えではない場合があります。より正確に言うと、それは 1 つのエンティティではなく、より小さく、より正確に設計されたパーツに分割される可能性があることを意味する場合があります。

価格の範囲の計算が行われます

これらの計算は Product エンティティに影響し、Product リポジトリで使用されているのと同じ NHibernate/EF セッションで処理する必要がありますか? それらは別の場所に保存する必要があるため、ユビキタス言語のファーストクラスの概念を構成し、独自の永続化ロジックを持つ別のエンティティになるのではないでしょうか?

http://ayende.com/blog/153699/ask-ayende-repository-for-abstracting-multiple-data-sourcesを参照してください。

于 2012-05-23T08:42:49.880 に答える
0

ORM は何をしますか? オブジェクトへの参照を渡す直前に、オブジェクトを現在の状態に復元するために使用されるデータのコピーを取得します。動作がオブジェクトに適用され、それを永続化するように要求している場合、ORM はデータのコピーを現在オブジェクト内にあるデータと比較し、それに応じて変更をフラッシュします。なぜ同じことをしないのですか?唯一の違いは、検出されたすべての変更が同じデータストアにフラッシュされるわけではないことです。

HTH。

ところで、ここで並行処理が行われていますか?

于 2012-05-23T05:55:46.400 に答える