2009-03-25 8 views
2

J'ai un DTO qui peut être entièrement chargé ou paresseux en utilisant Lazy Load Pattern. Le mode de chargement dépend de ce dont l'application Flex a besoin. Cependant, ce DTO sera envoyé à une application Flex (swf). Normalement, une collection par exemple, ne sera chargée que lorsqu'elle sera appelée. Dans mon cas cependant, la collection ne sera appelée que dans Flex, donc mon implémentation côté .NET ne fonctionnera évidemment pas dans ce cas (sauf si Flex ferait un appel serveur ... quelque chose que je voudrais éviter).Appeler un getter sans l'affecter à quoi que ce soit (chargement paresseux)

Dans le getter de la collection, les données sont extraites de la base de données. Si je travaillais avec des pages ASP.NET, cela fonctionnerait, mais pas si le DTO est envoyé à Flex.

Comment gérez-vous cela? Je pourrais appeler le getter avant d'envoyer le DTO à Flex, mais cela semble horrible ... + appeler le getter ne peut être fait que s'il est assigné à quelque chose (et la variable locale qui contiendra la collection ne sera jamais utilisée ...).

Répondre

1

Je voudrais probablement introduire une méthode Finalize pour la classe et peut-être une méthode d'extension FinalizeAll pour diverses collections de la classe. Cette méthode passerait simplement par et référencer tous les accesseurs sur les propriétés publiques de la classe pour s'assurer qu'ils sont chargés. Vous devez appeler Finalize (ou FinalizeAll) avant d'envoyer le ou les objets à votre application Flex. Vous pourriez même vouloir en faire une interface de sorte que vous puissiez tester le besoin de finalisation avant de transférer vos objets et invoquer la méthode basée sur un test pour l'interface plutôt que de vérifier individuellement chaque classe.

REMARQUE: Finalize est simplement le premier nom qui est apparu. Il peut y avoir (probablement) un meilleur nom pour cela.

+0

EagerLoad ou Load était mon idée du nom de la fonction. Nous sommes arrivés à la même conclusion ici qu'une méthode ferait bien. –

+0

Y at-il un moyen d'appeler le getter dans cette méthode Finalize sans avoir à l'assigner à une variable? –

+0

Je ne pense pas sans utiliser la réflexion. Vous pouvez cependant refactoriser l'appel getter d'une méthode qui définit la propriété, puis la méthode Finalize appelle cette même méthode. Je refactoriserais probablement ceci pour employer la réflexion aussi bien qu'elle pourrait être employée par toutes vos propriétés. – tvanfosson

2

Vous pouvez introduire une méthode pour charger les dépendants - loadDependencies - qui devrait prendre de tout chargement paresseux pour votre objet DTO avant d'être envoyé sur le fil (à Flex). Vous pouvez résumer cette méthode à une interface pour rationaliser ce processus à travers différents DTO. Il n'y a rien contre l'utilisation de getters comme vous l'avez décrit dans cette méthode.

Questions connexes