0

データベースの結果を取得してUIにデータを入力する必要がある3層のアプリケーションがあります。メッセージを処理するMessagesCollectionクラスがあります。データベースからユーザーをロードします。ユーザーのインスタンス化(つまり、new User())で、MessageCollection Messages = new MessageCollection(this)が実行されます。メッセージコレクションは、ユーザーをパラメーターとして受け入れます。

 User user = user.LoadUser("bob");

ボブへのメッセージを受け取りたいです。

 user.Messages.GetUnreadMessages();

GetUnreadMessagesは、データアクセス層を呼び出すビジネスデータプロバイダーを呼び出します。ビジネスデータプロバイダーはリストを返します。

私の質問は-ここでのベストプラクティスがわからない-MessagesCollectionクラス内の配列にメッセージのコレクションがある場合、ICollectionを実装してGetEnumerator()とメッセージをトラバースする機能を提供できます。しかし、メッセージが変更され、ユーザーが古いメッセージをロードした場合はどうなりますか?

ビッグメッセージコレクションはどうですか?ユーザーに10,000件の未読メッセージがある場合はどうなりますか?データベースにアクセスして10,000個のメッセージオブジェクトを返すのは効率的ではないと思います。

4

1 に答える 1

0

ユーザーの後にメッセージをロードするために別の呼び出しを行う場合は、DBへの往復を2回行っているようです。可能であれば、1回の旅行で、1回の旅行でユーザーにメッセージをロードすることを検討します。大量のデータセットに関しては、ある種のページングメカニズムを検討することをお勧めします。ユーザーがすべてのメッセージを1つのビューで理解することは不可能であるため、一度に1ページずつ表示することをお勧めします。

コレクションは、内部的に問題なく変更を追跡できます(イベントまたはその他)。カスタムイベントまたはINotifyPropertyChangedインターフェイスなどを使用して、エンティティに変更を公開できます。

于 2010-03-31T11:50:14.753 に答える