moyen privilégié pour convertir Lazy / Délai de chargement pour Désireuse de chargement dans une API?

StackOverflow https://stackoverflow.com/questions/1924594

Question

Je travaille sur une API (qui enveloppe un service Web de toutes sortes) pendant un certain temps maintenant, et à peu près sa fonction complète.

J'ai d'abord conçu cette API pour être paresseux / retard chargé tout au long; ce qui est logique parfait si vous n'êtes intéressé que par un petit sous-ensemble des données disponibles compte tenu de la latence inhérente à la consommation d'un service Web. Cependant, je ne ai pas considérer quelques cas d'utilisation où le chargement désireux serait beaucoup plus facile sur un consommateur de l'API.

Alors, ma question est: Comment voulez-vous voir une API qui est principalement de chargement paresseux exposer un mécanisme pour obtenir des versions avec impatience chargées de classes

?

Je suis penchée vers un casting de explicit, mais quelque chose le long des lignes de Eager.AsEager(SomeDelayLoadingObject) semble aussi naturel si plus bavard.

Était-ce utile?

La solution

Ce que j'ai fini par faire a été la création d'une copie superficielle des classes que je voulais être avec impatience, chargé des classes sans code fonctionnel mais avec tous les mêmes propriétés.

Je définit alors deux moulages implicites, de lazy-> avide et eager-> paresseux. Les deux moulages copiés toutes les propriétés; déclenchant ainsi tout chargement si cela était nécessaire.

Bien que je ne pense pas que ce soit une solution parfaite, il permet de charger avec impatience les types changeant simplement; aucune modification de code sont nécessaires.

Autres conseils

Votre API est enroulant un webservice, de sorte que votre API est plus ou moins le rôle de proxy. Je mettrais le comportement de chargement sur le proxy lui-même, ou sur une sorte de contexte proxy, plutôt que sur les classes.

// Basic: Every operation through the proxy uses Eager loading
using (var proxy = new ApiProxy(Loading.Eager))
{
  var result = proxy.DoSomething();
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top