2010-01-11 9 views
1

J'ai déjà rencontré plusieurs fois ce problème de conception et je me demandais s'il existait un modèle de conception OOP commun.Existe-t-il un modèle de conception commun permettant de créer une classe de collection?

Problème de conception: Je dois implémenter une classe qui représente une collection d'objets pouvant être assez volumineux. Pour des raisons de performances, la couche de présentation présentera les données dans des pages individuelles ne demandant qu'un petit sous-ensemble des objets à la fois lorsque l'utilisateur navigue dans les données. Idéalement, l'objet interroge également la base de données à la demande au lieu de pré-charger tout en mémoire, alors qu'il est très probable que pour des collections vraiment volumineuses, le client/utilisateur ne demandera jamais toutes les données de la collection.

Je l'ai implémenté de plusieurs façons, mais aucune d'entre elles ne semble très modulaire, propre ou dotée d'une interface vraiment intuitive. Existe-t-il un modèle de conception OOP commun pour implémenter un objet qui permet au client d'extraire les données une page à la fois et d'interroger les données du niveau de données uniquement si nécessaire?

+1

On dirait que vous voulez une variante d'itérateur. –

Répondre

4

Je voudrais étendre (ou créer) une classe Iterator et ajouter un paramètre constructeur qui spécifie le nombre d'éléments par page et ajouter une méthode nextPage() qui renvoie une collection de la taille appropriée (ou moins s'il n'y a pas assez d'éléments pour remplir une page). Une autre option consisterait simplement à étendre ou à créer une classe Iterator et à créer une méthode nextPage() qui prend un entier représentant le nombre maximal d'éléments qui devraient figurer sur la page, renvoyant une collection de la taille appropriée ou plus petite . Le modèle Iterator est dans le livre GoF, si vous avez besoin d'une référence.

1

Si vous souhaitez extraire de la base de données uniquement une page à la fois, vous pouvez le faire en tant que modèle de base de données. Que vous l'implémentiez dans la base de données ou dans une couche d'accès, vous devez savoir: Nombre total d'éléments, taille de la page, quelle page est demandée. Le code doit ensuite créer une liste complète des valeurs clés pour tous les éléments, indexables (si nécessaire ou spécifié), puis renvoyer toutes les données pour les éléments dont les index sont placés dans la page demandée. Dans le serveur SQL, par exemple, (avec les index appropriés sont en place), vous pouvez le faire dans un seul processus stocké en utilisant une variable Table pour contenir la liste triée des clés et renvoyer très rapidement toute page de données

+0

Désolé si je n'étais pas clair. Quand je parlais de la taille, je parlais du modèle de données logiques, pas de la mise en œuvre réelle. C'est à dire. la classe de collection REPRESENTE beaucoup d'articles. – JohnFx