2009-06-22 6 views
3

Disons que j'ai un objet assez complexe. Comme il est si complexe, il faut un peu à charger à partir de la base de données. Maintenant, disons que mes utilisateurs veulent une grille qui montre tous ces objets, et je sais que si je le fournis, les performances ne seront pas souhaitables. J'essaie de mettre le doigt sur la meilleure façon de gérer cela. Jusqu'à présent, j'ai deux idées:ASP.NET - chargement de données de grille avec une structure OO lourde

Implémenter chargement paresseux: Je n'ai pas vraiment besoin de l'objet entier pour afficher la grille. Je ne suis pas sûr que je veuille aller dans cette direction parce que partout ailleurs, l'objet entier sera chargé et je ne veux pas changer radicalement mon architecture pour les grilles.

Renvoyer un jeu d'enregistrements spécifiquement adapté à ma grille: C'est ainsi que je me penche. Fondamentalement, je retournerais un DataSet ou simplement un objet plat. Ma procédure stockée peut effectuer les relations de données pour renvoyer le jeu d'enregistrements comme souhaité.

Y a-t-il d'autres approches que je pourrais envisager? Je n'ai pas fait de vraies grilles auparavant et je voulais m'assurer que je l'ai bien fait la première fois. Quelqu'un peut-il venir avec les inconvénients de ma deuxième idée?

Répondre

3

Je pense que votre intuition est correcte que votre deuxième moyen est plus correct. Lorsque votre objet complet est si volumineux qu'il est important de le charger, vous avez raison d'essayer de minimiser la charge globale en réduisant la taille des données renvoyées. Il semble que votre objet puisse également bénéficier d'un peu de refactoring; Si c'est vraiment si gros que c'est trop compliqué à charger, pourrait-il être utile de le refactoriser en composants plus petits?

+0

Merci pour le conseil! –

1

Je créerais une entité légère qui représenterait les champs que vous devez afficher dans votre grille.

MAIS! Je ne ferais cela que si la grille est en lecture seule. Si vous devez modifier des objets de cette grille, vous vous retrouvez avec une couche de traduction maladroite qui pourrait ne pas être meilleure pour la performance. Dans ce cas, je voudrais paresseux charger vos objets de domaine. Il existe d'autres façons de tirer de meilleures performances de cette extraction de données, comme les réglages DB (index, vérification de la fragmentation des index, etc. Il suffit de vérifier le plan d'exécution après avoir écrit la requête).

Vous pouvez également implémenter la pagination dans votre proc si vous renvoyez une grande liste de ces objets lourds de sorte que vous n'en obteniez que 10 ou 20 à la fois et que l'utilisateur ait plusieurs pages à parcourir. Plutôt que de charger la liste entière et la page dans le code, vous pouvez ajouter une colonne pour rownumber et transmettre le début et la fin du numéro de ligne que vous souhaitez extraire en tant que paramètres du proc.

+0

Merci pour vos conseils. Je suis d'accord avec toi. J'utilise la pagination, mais les merveilleux utilisateurs s'attendent à être en mesure de tirer jusqu'à 100 dossiers. La grille est en lecture seule et toutes les actions qu'ils peuvent effectuer sur elle fonctionnent avec un écran Zoom. Merci encore! –