2010-08-13 20 views
2

La situation se produit lors de l'obtention de certaines données de la base de données pour composer un rapport groupé par différents champs. Par exemple, regroupés par mois, puis saisissez puis réel par rapport à la prédiction. La requête de base de données renvoie simplement un Liste < Object []>. Mais il est ennuyeux de le rendre directement sous forme de tableau HTML. Ce que je fais est de regrouper les données à l'intérieur d'un Carte < Entier, Carte < Chaîne, Carte < Type, Entier >>>. Cela peut être fait de manière simple et si j'utilise TreeMap, les données sont automatiquement triées pour moi. Le code JSP résultant est beaucoup plus simple.Carte imbriquée <K,V> au lieu de Liste < Object[] > comme valeurs de retour. Des problèmes?

Y a-t-il un problème avec cette approche? (mémoire, vitesse ou autre chose?)

+0

Testez-le et découvrez – Falmarri

Répondre

2

Le moteur de rendu HTML ne devrait pas avoir à connaître les détails d'implémentation de votre DAO.

Je pense pour vous DAO que le retour List<Object[]> est plus simple que le retour Map<Integer, Map<String, Map<Type, Integer>>>. Chaque interface de classe devrait être facile à comprendre, donc j'utiliserais List<Object[]>.

S'il est plus facile de rendre le tableau HTML en utilisant Map<Integer, Map<String, Map<Type, Integer>>> peut-être est préférable de créer une méthode pour convertir List<Object[]> en Map<Integer, Map<String, Map<Type, Integer>>>. De cette façon, vous conservez votre interface utilisateur détachée de vos classes de base de données.

Vous avez également posé des questions sur la mémoire et la vitesse. Je pense que la meilleure approche consiste à tester les deux situations et à utiliser un profileur pour mesurer si c'est vraiment un problème.

+0

Je suppose que le GUI devrait recevoir une structure de données très simple, dans le sens où il devrait être facile à utiliser/comprendre. Cela maintient la page propre et modifiable par les concepteurs de sites Web qui ne programment pas (pensez à trois imbriqués par rapport à un seul avec beaucoup de drapeaux et conditionnels). Il n'est peut-être pas judicieux de donner au DAO la responsabilité de grouper et trier ses résultats. Je suppose que je laisserai les beans/controllers gérés faire le travail. Ainsi, j'aurai la flexibilité de grouper et de trier la sortie du DAO de différentes manières. –

1

Y a-t-il un problème avec cette approche? (mémoire, vitesse ou autre chose?)

Une TreeMap utilisera plus de mémoire que ArrayList, et probablement qu'une LinkedList. Cela peut être plus lent ... ou plus rapide ... en fonction de la manière dont les listes sont triées et utilisées.

Mais les chances sont que la différence ne sera pas perceptible à moins que les structures de données soient vraiment grandes. La meilleure approche consiste à commencer par la structure de données qui vous donne le code le plus simple et le plus robuste. Si (et seulement si) les performances sont sensiblement ralenties si vous passez du temps à optimiser, et seulement si le profilage vous indique que cette est la cause de vos problèmes de performances.