Pregunta

Yo empecé a usar silverlight/flex y de inmediato se topó con el servicio asincrónico de llamadas.Estoy acostumbrado a la solución de los problemas de acceso a los datos en una OO-forma con un servidor mecanismo de captura o de otra.

Tengo el siguiente trivial ejemplo de código:

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 he entendido bien, este código es imposible en Flex/Silverlight.La carga diferida te obliga a trabajar con las devoluciones de llamada.IMO el simple expample arriba va a ser un lío.

Puede alguien darme una forma estructurada para implementar la anterior ?

Editar:

  • El problema es el mismo para Flex/Silverlight, pseudo código bien
  • No es realmente ORM relacionadas, pero la mayoría de los orm uso carga diferida así que voy a quitar esa etiqueta
  • El problema es la carga diferida en el modelo
  • El ejemplo anterior podría ser muy factible, de todos los datos que estaba en la memoria, pero suponemos que algunos han de ser obtenidos a partir de el servidor
  • Closueres no ayuda ya que a veces los datos ya cargados y no búsqueda asíncrona es necesario
¿Fue útil?

Solución 7

C # 5 asíncrono / Await constructo casi exactamente lo que quiero ..

ver la presentación por parte de Anders Hejlsberg

Otros consejos

Sí estoy de acuerdo que el mapeo O / R se hace generalmente en el lado del servidor de la aplicación. En Silverlight manera asíncrona de ejecución es el patrón deseado para usar cuando se trabaja con los servicios. ¿Por qué servicios? Debido a que como he dicho antes no hay herramienta de mapeo O / R en el momento en que se podría utilizar en el lado del cliente (SilverLight). El mejor enfoque es tener su O / R mapea datos expuestos por un servicio que puede ser consumido por una aplicación de Silverlight. La mejor manera en este momento es utilizar DataServices ADO.NET para el transporte de los datos, y en el lado del cliente para gestionar los datos utilizando LINQ a Servicios. Lo que es realmente interesante acerca de ADS (antiguo proyecto Astoria) es que está diseñado para ser utilizado con el marco de la entidad, pero la buena gente también implementó soporte para IQueriable así que básicamente se puede conectar a cualquier proveedor de datos que apoyan LINQ. Para nombrar unos pocos se puede considerar LINQ to SQL, Telerik OpenAccess , LLBLGen, etc. para empujar los cambios de nuevo a se requiere que la fuente de datos para apoyar la ADS IUpdateable el servidor.

Usted puede mirar exactamente cómo esto se podría hacer en una serie de entradas del blog que he preparado aquí: Introducción a ADO.NET Data Services y Telerik Acceso Abierto

No puedo hablar de Silverlight, pero Flex es un navegador web la tecnología cliente y no tiene ningún controlador de base de datos incorporado en el motor de ejecución de Flash.Usted puede hacer el protocolo HTTP interacciones a un servidor web en su lugar.Es allí en el nivel medio del servidor web donde podrás hacer cualquier ORM con respecto a una conexión de base de datos, tales como Java JDBC.ORM Hibernate e iBATIS son dos de las opciones más populares en el nivel intermedio de Java espacio.

También, debido a esto:

Las falacias de la Computación Distribuida

Usted no tiene que hacer interacciones sincrónicas de un Flex cliente de sus servicios de nivel medio.Sincrónico de operaciones de la red se han convertido en verboten en estos días y que son el sello distintivo de la firma de una aplicación mal diseñada - como debido a razones enumeradas en el enlace de arriba, la aplicación puede (y a menudo lo hará) exhiben una muy mala experiencia de usuario.

En lugar de hacer llamadas asincrónicas para recuperar datos, cargar los datos en su cliente de la aplicación del modelo de objeto(s), y proceder a implementar las operaciones en el modelo.Con Flex y BlazeDS también puede hacer que el nivel medio de inserción de datos para el cliente y actualización del cliente en el modelo de objetos de forma asincrónica.(Enlace de datos es una manera de responder a los datos que se actualizan en un evento impulsado manera.)

Todo esto probablemente parece muy muy lejos de la naturaleza de la investigación en su publicación -, pero su publicación indica que usted está apagado en una totalmente incorrecto pie de igualdad en cuanto a cómo entender tecnologías del lado del cliente que han asincrónica y programación orientada a eventos cocido al horno en su arquitectura básica.Estos RIA cliente tecnologías están diseñados de esta manera completamente a propósito.Así que usted tendrá que aprender su modo de pensar, si quieres tener una buena y productiva experiencia con ellos.

Yo entrar en más detalle, y con un Flex perspectiva, en este artículo:

Flex Async/S vs Java y C# Explícita Roscado

En mi experiencia con Flex, creo que esta discusión se está volviendo demasiado complicado.

Su punto de vista conceptual OO no es diferente entre la sincronización y desincronizado. La única diferencia es que utiliza controladores de eventos para hacer frente a la conversación de acogida en el DAL, en lugar de algo de regresar de una llamada al método. Y que a menudo ocurre enteramente en el lado del anfitrión, y no tiene nada que ver con Flex o Silverlight. (Si está utilizando una aplicación de AIR para estación de trabajo, que podría estar en código de cliente, pero lo mismo se aplica. Además si está utilizando AJAX prolongada. Silverlight, por supuesto, no tiene aire equivalente.)

He sido capaz de diseñar todo lo que necesito sin otros cambios necesarios para acomodar desincronizado.

Flex tiene un modelo de un solo subproceso. Si usted hace una llamada sincrónica con el servidor web, que le bloquear toda la interfaz gráfica de usuario de la aplicación. El usuario tendría una aplicación congelada hasta que la llamada se completa (o el tiempo de espera en una condición de error en la red, etc.).

Por supuesto verdaderos programas RIA no se escriben de esa manera. Su interfaz gráfica de usuario sigue siendo accesible y sensible al usuario mediante el uso de las llamadas asíncronas. También hace que sea posible disponer de indicadores de progreso reales que ofrecen botones Cancelar y como si la naturaleza de las órdenes de interacción.

Viejo, mala experiencia de usuario web 1.0 aplicaciones exhibió el comportamiento síncrono en sus interacciones con la capa web.

Como mi artículo enlazado señala, el modelo de un solo subproceso asíncrono junto con ActionScript3 cierres es una buena cosa porque es un modelo de programación mucho más simple que la alternativa - escribir aplicaciones multi-hilo. Multi-threading fue el enfoque de escribir cliente-servidor Java Swing o aplicaciones WinForm de .NET en C # con el fin de conseguir una, experiencia igualmente sensibles a los fluidos en situación de todos los tiempos usuario en la interfaz gráfica de usuario.

Aquí hay otro artículo que profundiza en todo este tema de la arquitectura distribuida aplicación impulsada por el evento de la mensajería / asíncrono:

Software Systems Edificio eficaz empresa distribuida comunicación de datos impulsada por el comportamiento frente a la comunicación impulsada

Silverlight es una tecnología cliente y el objeto - de mapeo relacional pasa por completo en el servidor. Así que hay que olvidó el ORM en Silverlight.

Siguiendo tu ejemplo lo que tiene que hacer es crear un servicio web (SOAP, REST ...) que pueden dar a su cliente el objeto Silverlight completa "orden". Una vez que tenga el objeto se puede trabajar con él sin comunicación con el servidor de manera normal -. Manera sincrónica

Al hablar acerca de Silverlight, sin duda debe servicios RIA .

Simplemente, que trae el DataContext desde el servidor al cliente desde donde se pueden consultar de forma asíncrona que (no hay necesidad de escribir servicios WCF con la mano, se hace todo por RIA).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top