2

バックグラウンド

.NET を使用してリッチ クライアント アプリケーションを構築する必要があります。アプリは、約 100000 のエンティティを持つ TreeViewControls と TableViewControls を処理する必要があります。GUI は WPF で構築されており、おそらく Telerik Controls を使用しています。私の質問は、データ層の一般的なアーキテクチャに関するものです。概念については大まかなアイデアがいくつかありますが、コメント/考えや、どのテクノロジーをより深く掘り下げる必要があるかのヒントをいただければ幸いです。ここに私の考えがあります:

概念レイヤー

プレゼンテーション層

WPF コントロールだけで、プロパティの変更に関するさまざまなコントロールのパフォーマンスの高い同期が必要ですが、ここで大きな問題が発生することはないと思います。

ビジネス層

ビューの作成 (コントロールに表示されるオブジェクトの選択)、CRUD 操作 (POCO で直接行われる変更)、検索 (グローバル検索、ただしビューに限定される)

リポジトリ

エンティティ マップに POCO を保持し、永続ストアからロードする天気を決定します

持続性マネージャー

LocalDB または単純な Key-Value ストアを (永続的な) クライアント キャッシュとして使用することを考えています。そのため、Persistence-Manager はローカル ストアからオブジェクトを取得しようとします。それ以外の場合は、サーバーからデータを取得します。また、Client-Cache にデータを永続化します。データは Web サービス経由で利用できます。WCF Data Services をお試しいただければ幸いです。

永続層

2 つの部分があります。 - EF や OpenAccess などの ORM を使用したローカル DB 接続。または単純なキーと値のストア - Web サービスを使用するための HTTP 接続

質問

  • このような階層化では、参照オブジェクトの遅延読み込みはどうですか? EF やその他の ORM が、私がここで抱えている多くの問題を解決してくれることも知っています。しかし、これらのフレームワークを上記の階層化にプラグインする方法はまだわかりません。また、どこで変更を追跡しますか? オブジェクトを削除するときに一貫性を確保する場所は? (たとえば、これらのオブジェクトへの参照も削除します)
  • ビュー全体 (階層構造) を積極的にロードし、それらの POCO のコレクションに対するオブジェクトに対して Linq を実行します。Linq のパフォーマンスが問題になる場合は、単純な逆インデックスを実装するかもしれません。しかし、サーバー上でグローバル検索を実装するにはどうすればよいでしょうか? 利用可能なライブラリ (「Linq to OData」) はありますか?
  • 完全に「切り離された」シナリオについてどう思いますか? ユーザーが必要とするすべてのデータをローカル データベースに保持します。開始/停止およびユーザーがトリガーしたときに同期します。ORM をローカル DB で直接使用することができ、(上記の階層化を使用して) 多くの一貫性機能を手動で実装しようとする多くの頭痛の種を回避できる可能性が高くなります。
  • または、対照的に、ローカル データベースのことは忘れて、必要なデータのほとんどを一括一括読み込みします。ここで、Web サービスのパフォーマンスが気になります (OData、WCF の経験はありません)。Redis と Python を使用して、約 200000 個のビジネス オブジェクトを非常に高速 (< 1 分) にクライアントにロードするアプリを構築しました (オブジェクトは既に Redis にキャッシュされてシリアル化されています)。

私は確かにいくつかのプロトタイピングとベンチマークを行いますが、良いスタートを切るために、考えや推奨事項は非常に高く評価されています.

乾杯、

1月

4

0 に答える 0