2010-03-30 8 views
0

J'ai une application à 3 niveaux où j'ai besoin d'obtenir des résultats de base de données et peuplé l'interface utilisateur. J'ai une classe MessagesCollection qui traite les messages. Je charge mon utilisateur depuis la base de données. Sur l'instanciation d'un utilisateur (par exemple, new User()), un message MessageCollection Messages = new MessageCollection (this) est exécuté. La collection de messages accepte un utilisateur en tant que paramètre.Accès à la base de données via les collections

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

Je veux recevoir les messages pour Bob.

user.Messages.GetUnreadMessages(); 

GetUnreadMessages appelle mon fournisseur de données d'affaires qui appelle à son tour la couche d'accès aux données. Le fournisseur de données métiers renvoie List. Ma question est - Je ne suis pas sûr de la meilleure pratique ici - Si j'ai une collection de messages dans un tableau à l'intérieur de la classe MessagesCollection, je pourrais implémenter ICollection pour fournir GetEnumerator() et la capacité de traverser les messages. Mais que se passe-t-il si les messages changent et que l'utilisateur a d'anciens messages chargés?

Qu'en est-il des grandes collections de messages? Que faire si mon utilisateur avait 10 000 messages non lus? Je ne pense pas que l'accès à la base de données et le retour de 10 000 objets Message seraient efficaces.

Répondre

0

Il semble que si vous passez un appel distinct pour charger les messages après l'utilisateur, vous effectuez 2 allers-retours vers la base de données. Si possible, je considérerais faire un seul voyage et charger l'utilisateur avec des messages en un seul voyage. En termes de grands ensembles de données, vous pouvez envisager un mécanisme de pagination. Il serait impossible à l'utilisateur de comprendre tous les messages dans une seule vue, il serait donc préférable de leur montrer une page à la fois.

La collection sera capable de suivre les changements en interne sans problème (événements ou autres). Vous pouvez exposer les modifications à votre entité en utilisant un événement personnalisé ou quelque chose comme l'interface INotifyPropertyChanged.

Questions connexes