このアプローチには根本的な問題のカップル(IMO)があります
EFは、任意のORMのように、永続性の懸念に落ちます。このように、ドメインモデルの構造を妨げてはいけません。 1つの永続ストアのように聞こえるようにすべてのエンティティを永続化しているという事実は、境界のあるコンテキストが重複しているか存在していないことを示す可能性があります。
より良い構造に移行しようとするのは悪いことではありません:)しかし、Mark Oreta氏が述べたように、私はおそらくEF構造を気にしません。
実行中の主な問題は、ドメインモデルからの読み取りを試みたことが原因です。これはシステムであまりにも頻繁に切り詰めているように見えます。レイジーローディングはまさにこれの直接的な結果です。読んでいるときは理想的には、読み込み用に最適化されたクエリストア(同じデータベースかもしれない)へのアクセスを持つクエリレイヤーを使用してください。あなたの例では、あなたの販売ドメインに非正規化された顧客名が必要です。それは結構です。あなたのドメインモデルを読んでそれを取得しようとすると、別の制限されたコンテキストでドメインモデルからデータを取得しようとすると、あなたの痛みの原因になります。
データを分割するルートを下った場合は、を分割したままにする必要があります。
さまざまなBCのデータはすべて同じストアにあるかもしれませんが、各BCに独自のデータベースがあるようにデータを考えるべきです。時には私は、異なるフォルダ/名前空間(ここでは.NET)にさまざまな懸念(いくつかのレイヤー)がある単一のプロジェクトを持っています。これらの懸念事項を別々のアセンブリに分割することは可能です。だから彼らはあまりにも緊密に結合すべきではありません。分割しようとしているデータ構造についても同じことが言えます。本質的に、関連BCデータを別のデータベースに分割することができます。 BC間でデータを取得するための仕組みは別の問題であり、それが解決できない場合は難しいと感じるかもしれません。
私はデータ側からのBCを識別することは、それは確かに正しい方向への一歩である最高のアイデア:)
だから、それは良いことだので、私は私の販売BCに顧客を追加する場合、それは本当に問題ではありませんが、言っています –
また、私が販売ドメインに正規化されていない顧客名が必要な場合は、Salesテーブルに別の列CustomerNameを追加する必要があるのか、それとも追加する必要があるのですか? –
顧客の販売ドメインに顧客を追加すると、それはデータを提供しているだけなので、VOになり、あなたは全くそれと対話しません。 Salesドメインの「Customer」にはIDとFullNameのみが含まれている可能性がありますが、CustomerエンティティをSalesドメインに「プル」しないでください。 d販売ドメインの非正規化顧客名を選択します。もちろんそれはすべてコンテキストに依存します:) –