Question

J'ai commencé à utiliser silverlight / flex et immédiatement tombé sur l'appel de service asynchrone. Je suis habitué à résoudre les problèmes d'accès aux données dans un OO sens avec un serveur ou d'une autre mécanisme chercher.

Je le trivial exemple de code suivant:

public double ComputeOrderTotal(Order order) 
{ 
   double total = 0;
   // OrderLines are lazy loaded
   foreach (Orderline line in order.Orderlines) 
   { 
       // Article,customer are lazy loaded 
       total = total + line.Article.Price - order.Customer.discount;
   }
   return total;
}

Si je comprends bien, ce code est impossible dans Flex / Silverlight. Les forces de chargement paresseux vous de travailler avec callbacks. OMI le expample simple, ci-dessus sera un gâchis BIG.

Quelqu'un peut-il me donner un moyen structuré pour mettre en œuvre ce qui précède?

Edit:

  • Le problème est le même pour Flex / Silverlight, le code de pseudo serait faire amende
  • Son pas vraiment ORM liés, mais la plupart ORM utilisent le chargement paresseux donc je vais supprimer cette balise
  • Le problème est paresseux dans le chargement modèle
  • L'exemple ci-dessus serait très faisable de toutes les données en mémoire, mais était nous supposons que certains doit être chargé de le serveur
  • Closueres DonT aide car parfois données est déjà chargée et aucune récupération asynchrone est nécessaire
Était-ce utile?

La solution 7

C # 5 async / Attendent construction va presque exactement ce que je veux ..

regarder la présentation par anders Hejlsberg

Autres conseils

Oui je suis d'accord que le mappage O / R se fait habituellement sur le côté serveur de votre application. Dans SilverLight manière asynchrone d'exécution est le motif souhaité à utiliser lors de l'utilisation des services. Pourquoi les services? Parce que, comme je l'ai dit il n'y a pas d'outil de mappage O / R à l'instant qui peut être utilisé sur le côté client (SilverLight). La meilleure approche est d'avoir votre O / R mis en correspondance des données exposées par un service qui peut être consommé par une application SilverLight. La meilleure façon pour le moment est d'utiliser DataServices de ADO.NET pour transporter les données, et sur le côté client pour gérer les données en utilisant LINQ aux services. Ce qui est vraiment intéressant ADS (ancien projet Astoria) est qu'il est conçu pour être utilisé avec Entity Framework, mais les bonnes gens soutien également mis en œuvre pour IQueriable donc en gros, vous pouvez brancher un fournisseur de données qui prennent en charge LINQ. Pour ne citer quelques-uns vous pouvez envisager sql Linq, Telerik OpenAccess , LLBLGen, etc. pour pousser les mises à jour sur le serveur de la source de données est nécessaire pour soutenir l'ADS IUpdateable.

Vous pouvez regarder exactement comment cela pourrait se faire dans une série de blogposts que j'ai préparé ici: Mise en route avec ADO.NET Data services et Telerik Open Access

Je ne peux pas parler à Silverlight, mais Flex est une technologie client navigateur Web et n'a pas de pilote de base de données intégrée dans le moteur d'exécution Flash. Vous pouvez faire des interactions de protocole HTTP à un serveur Web à la place. Il est là dans le serveur Web de niveau intermédiaire où vous ferez une ORM par rapport à une connexion de base de données, telles que Java JDBC. Mise en veille prolongée ORM et iBATIS sont deux des choix populaires dans l'espace de niveau intermédiaire Java.

En outre, à cause de cela:

sophismes de l'informatique distribuée

Vous ne faites pas les interactions synchrones d'un client Flex à ses services de niveau intermédiaire. les opérations de réseau synchrone sont devenus verboten ces jours-ci et sont la signature marque d'une application mal conçue -. comme pour des raisons énumérées au lien ci-dessus, l'application peut (et souvent) présentent une expérience utilisateur très mauvais

au lieu de faire appel async pour récupérer des données, charger les données dans l'objet modèle (s) de votre application client et procéder à la mise en œuvre des opérations sur le modèle. Avec Flex et BlazeDS, vous pouvez également les données de poussée de niveau intermédiaire au client et mettre à jour les objets du modèle du client de manière asynchrone. (Liaison de données est une façon de répondre aux données qui sont mises à jour lors d'un événement de manière entraînée.)

Tout cela semble probablement très loin de la nature de l'enquête dans votre annonce - mais votre affichage indique que vous êtes sur un pied d'tout à fait inexact quant à la façon de comprendre les technologies côté client qui ont cuit au four de programmation asynchrone et événementielles dans leur architecture fondamentale. Ces technologies client RIA sont conçus de cette façon tout à fait exprès. Vous aurez donc besoin d'apprendre leur mode de pensée si vous voulez avoir une bonne expérience productive et de les utiliser.

Je vais dans plus en détail et avec une perspective Flex, dans cet article:

Flex Async I / O vs Java et C # explicite Threading

Dans mon expérience directe avec Flex, je pense que cette discussion devient trop compliquée.

Votre vue conceptuel OO ne diffère pas entre la synchronisation et asynch. La seule différence est que vous utilisez des gestionnaires d'événements pour faire face à la conversation hôte dans le DAL, plutôt que quelque chose de revenir d'un appel de méthode. Et cela arrive souvent entièrement du côté hôte, et n'a rien à voir avec Flex ou Silverlight. (Si vous utilisez AIR pour une application de poste de travail, alors il pourrait être dans le code client, mais en va de même. En plus si vous utilisez AJAX prolongée. Silverlight, bien sûr, n'a pas d'équivalent AIR.)

Je suis en mesure de concevoir tout ce que je besoin sans autre changement nécessaire pour accueillir asynch.

Flex a un modèle mono-thread. Si vous faites un appel synchrone au serveur web, vous souhaitez bloquer l'interface graphique complète de l'application. L'utilisateur aurait une application bloquée jusqu'à ce que l'appel se termine (ou parfois sur une condition d'erreur réseau, etc.).

Bien sûr réels programmes d'AIR ne sont pas écrits de cette façon. Leur interface reste accessible et adapté à l'utilisateur via l'utilisation d'appels asynchrones. Il permet également d'avoir de véritables indicateurs de progrès qui offrent des boutons et annuler comme si la nature des bons de souscription d'interaction tels.

Vieux, mauvaise expérience utilisateur Web 1.0 applications exposées le comportement synchrone dans leurs interactions avec le niveau Web.

Comme mon article lié souligne, le modèle mono-thread async couplé avec ActionScript3 fermetures est une bonne chose car il est un modèle de programmation beaucoup plus simple que l'alternative - l'écriture des applications multi-threads. Multi-threading a été l'approche de l'écriture Swing Java client-serveur ou applications C # WinForm .NET afin d'obtenir une réponse de la même, fluide à-tout-temps expérience utilisateur dans l'interface graphique.

Voici un autre article qui se penche sur toute cette question de la matière asynchrone, l'architecture de l'application distribuée par événement de messagerie /:

Construction efficace entreprise distribuée Software Systems communication axée sur les données contre la communication axée sur le comportement

Silverlight est une technologie de client et l'objet - la cartographie relationnelle se produit complètement dans le serveur. Vous devez donc oublié les ORM dans Silverlight.

Après votre exemple ce que vous avez à faire est de créer un webservice (SOAP, REST ...) qui peut donner à votre client silverlight l'objet « Commander » complète. Une fois que vous avez l'objet que vous pouvez travailler avec elle sans communication avec le serveur dans une normale -. Manière synchrone

En parlant de Silverlight, vous devriez certainement vérifier services RIA .

Simplement, il apporte le DataContext du serveur au client à partir duquel vous pouvez l'interroger de manière asynchrone (il n'y a pas besoin d'écrire des services WCF à la main, tout cela se fait par RIA).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top