0

非常に大きなDBを持つバックオフィスアプリケーションを開発しています。DB からメモリにすべてをロードするのは合理的ではないため、モデルのプロパティが要求されると、(EF を介して) DB から読み取ります。しかし、UI の多くは、ユーザーに提示されるいくつかの (!) プロパティを持つエンティティの単なるリストです。たとえば、ID、タイトル、名前を表示したいだけです。その後、ユーザーがアイテムを選択していくつかのアクションを実行したい場合、オブジェクト全体が必要になります。これで、メモリに保存されたアイテムのリストができました。一部のプロパティには、大きな textst、画像、またはその他のデータが含まれています。EF はエンティティを操作し、多数の大きなオブジェクトを読み取ると、パフォーマンスが著しく低下します。

私が理解している限り、問題は軽量エンティティを作成し、適切なコンテキストで使用することで解決できます。

初め。各ビューで新しい LightweightEntity を作成することになり、最終的には肥大化したオブジェクト コンテキストで終わるのではないかと心配しています。

2番。モデルが EF をラップするため、さまざまなエンティティにメソッドを提供する必要があります。

三番。ViewModel は互いに通信し、エンティティを渡します。

したがって、私はこれらすべての考慮事項に行き詰まっており、優れたアーキテクチャ設計のアドバイスが必要です。何か案は?

4

1 に答える 1

1

画像が大きいテキストの場合は、テーブル分割を検討できます。これは、テーブルを軽量エンティティと「重い」エンティティに分割するために一般的に使用されます。

しかし、軽量の「エンティティ」と呼ばれるものは、データ転送オブジェクト (DTO) だと思います。これらはコンテキストによって提供されるのではなく (肥大化しないため)、リポジトリまたはサービスで行われるエンティティからの射影によって提供されます。

プロジェクションにはAutoMapper、特にここで説明する新しい機能を使用できます。これにより、"さまざまなエンティティ" (DTO) に提供する必要があるメソッドの数を減らすことができます。これは、投影する型をジェネリック型パラメーターで指定できるためです。

于 2012-08-03T18:09:36.863 に答える