0

私のビジネスロジックとコアエンティティは緊密に結合されています。Entity FrameworkのID可能なエンティティコード

  • たとえば、Sessionというオブジェクトはデータベースエンティティですが、文字通り言葉で言えば、イベントが記録される実際のセッションです。
  • このセッションオブジェクトには[NotMapped]オブジェクトもあり、アンマネージドリソースを処理します。
  • SessionオブジェクトはIDisposableも実装します。
  • 私のプロジェクトのエンティティの良い塊は、上記の特徴を持っています。

これは災害のようです。問題は、ここでどのようなアプローチを取るかです。

答えは、デザインパターンやアーキテクチャを指すことを期待していますが、提案されているソリューションの名前ではなく、そのポイントを説明するための非常に短いコード例を含めてください。

これまで考えてきたことは、各エンティティからビジネスオブジェクトとして派生し、コード生成を使用してあるタイプから別のタイプに変換することです。これはクライアント/サーバーアプリケーションであるため、派生アプリケーションであるにもかかわらず、デスクトップアプリケーションでそのままエンティティリレーションシップを使用できるようにしたいと考えています。

持続可能な方法でこれを達成する方法がわかりません。

+0

緊密に結合されていると急速に近づいています。 –

答えて

1

これはデザインパターンではなく、使い捨てエンティティの所有権に関するものです。誰がエンティティを所有していますか?所有者は処分の責任を負います。これはあなたのコード/デザインによって直接定義されたものです。

EFコンテキスト自体は使い捨てです。Dispose操作をオーバーライドして、すべての添付エンティティを処分することができますが、おそらくコンテクストはエンティティの所有者ではないため、実行したくないものです。文脈からエンティティを要求したり、エンティティの永続性を要求したりするコードは、処分の責任者とみなされるべきである。

+0

'Dispose'は良いポインタです。ありがとう。私の場合、私のエンティティクラスには、オフィスの相互運用アプリケーションのようなものへの参照があります。あなたが想像しているように、コンストラクタ、イニシャライザ、デストラクタは、これらの参照が呼び出される原因になります。問題は、これらの参照はクライアント側でのみアクセスする必要があることです。したがって、質問:どのように私はこれを再考する必要があります。 –

+0

エンティティとそれらの管理されていないリソースを切り離します。 –

+0

私が尋ねることは、それをどのように構造化するかです。そのようなエンティティごとに継承されたビジネスオブジェクトを作成しますか?構図を使う?いくつかの他のよく知られている技術? –

関連する問題