J'ai modélisé un ensemble d'objets qui correspondent à certains concepts du monde réel .reconstruction de modèle d'objet pour s'adapter à l'extraction de données asynchrones
TradeDrug, GenericDrug, TradePackage, DrugForm
base du modèle simple objet que je suis en train de fournir est une terminologie médicale complexe qui utilise des codes numériques pour représenter les relations et les concepts, tous accessibles via un service REST - I J'essaie de cacher une partie de cette complexité avec un wrapper d'objet.
Pour donner un exemple concret
Je peux appeler
TradeDrug d = Searcher.FindTradeDrug("Zoloft") or
TradeDrug d = new TradeDrug(34)
où 34 pourrait être le code de Zoloft. Cela va consulter un serveur distant pour trouver quelques détails sur Zoloft. Je pourrais alors appeler
GenericDrug generic = d.EquivalentGeneric()
System.Out.WriteLine(generic.ActiveIngredient().Name)
afin de récupérer le sertraline médicament générique comme un objet (encore une fois via un appel REST d'arrière-plan au serveur distant qui a tous ces détails de la drogue ), et peut-être trouver son ingrédient .
Ce modèle fonctionne correctement et est utilisé dans certaines applications qui impliquent le traitement de données. Récemment, cependant, je voulais faire une application Silverlight qui utilisait et affichait ces objets . L'environnement Silverlight autorise uniquement les appels de service REST/Web asynchrones . Je n'ai aucun problème avec la façon de faire les appels asychhroniques - mais j'ai des problèmes avec ce que le design devrait être pour ma construction d'objet.
Actuellement, les constructeurs de mes objets effectuent des appels REST de manière synchrone.
public TradeDrug(int code)
{
form = restclient.FetchForm(code)
name = restclient.FetchName(code)
etc..
}
Si je dois utiliser async « événements » ou « actions » afin d'utiliser le client Web Silverlight (je sais silverlight peut être forcé d'être un client synchrone mais je suis intéressé par approches Asychronous), est-ce que quelqu'un a une orientation ou une meilleure pratique pour la façon de structurer mes objets.
je peux passer dans un rappel d'action au constructeur
public TradeDrug(int code, Action<TradeDrug> constructCompleted)
{
}
mais cela permet à l'utilisateur d'avoir une TradeDrug instance d'objet avant ce que je veux construire est en fait terminée. Il ne prend pas non plus en charge un modèle asynchrone 'événement' car l'objet n'existe pas pour ajouter l'événement jusqu'à ce qu'il soit construit.
L'extension de cette approche pourrait être un objet usine qui se a une interface asynchrone aux objets
factory.GetTradeDrugAsync(code, completedaction)
ou avec un événement GetTradeDrugCompleted?
Quelqu'un a-t-il des recommandations? Est-ce que quelqu'un sait comment le nouveau cadre réactif pourrait s'intégrer avec une solution ?
merci Alex. Pour le crédit bonus, je m'intéresse également à la façon dont les schémas de construction de l'objet pourraient mieux s'intégrer dans le nouveau cadre Réactif. Ma compréhension est que le chemin de «l'événement» pourrait être un peu mal à l'aise (notant que je ne sais rien à peu près sur Reactive) –