2010-04-28 13 views
8

[exención de responsabilidad: Soy desarrollador ASP.NET MVC]Silverlight 4 servicios WCF RIA y MVVM no es tan simple

Hola,

Busco algunas mejores prácticas en la implementación de patrón MVVM con WCF RIA en Silverlight 4.

No estoy buscando utilizar MEF de IoC para ubicar mis ViewModels. Lo que me gustaría saber es cómo aplicar el patrón MVVM con Silverlight 4 y WCF RIA.

No quiero utilizar otras cosas como Prism o MVVM Light toolkit. Encontré muchos ejemplos en Internet que muestran cómo es maravilloso arrastrar y soltar un origen de datos en la vista y el trabajo está hecho (me recuerda a mis primeros desarrollos de VB6).

Intenté implementar MVVM con WCF RIA y no es nada sencillo. Si lo entiendo, el MVVM debe contener toda la lógica para poder probarlo en forma aislada, pero cuando se trata de combinarlo con WCF RIA es otra historia. Tengo las siguientes preguntas.

  1. ¿Puedo utilizar un metadato generado como modelo? Sería más fácil usarlo que si escribo todo desde el principio.

  2. Como pude ver, la única forma de obtener datos es a través de DomainContext o mediante enlace directo en la vista (recurso local). No quiero el enlace directo en la vista, no se puede probar en absoluto. Por otro lado, no puedo usar DomainContext, ¡¡¡no expone ninguna entidad !!! Todo lo que tengo es el EntitySet que puedo vincular a la cuadrícula de datos. ¿Cómo puedo vincular una única entidad a DataForm desde ViewModel?

  3. ¿Cómo ubico el modelo en la base de datos?

  4. Cómo navego de una entidad a una colección de sus elementos. Por ejemplo, si tengo una Entidad de empresa, me gustaría mostrar un DataForm para actualizar la información de una entidad y una cuadrícula de datos para mostrar las direcciones de las empresas. Al guardar un formulario, me gustaría guardar una información para la Compañía y una información para informar sobre qué dirección se seleccionó como activa.

Por favor, ayúdenme a entender cómo hacerlo bien. O tal vez debería dejar el WCF RIA y hacerlo con WCF desde cero.

¿Qué opinas?

Respuesta

9

Le puede interesar session. Explica cómo usar el patrón MVVM con RIA WCF Services.

+0

definitivamente recomendaría mirar el código de ejemplo de 'BookClub' de este artículo. aprendí mucho de él –

4

Algunas respuestas al azar ...

No creo que el MEF es particuarly muy adecuado para Silverlight. Principalmente para aplicaciones de escritorio, y podría adaptarse para otros usos en los que los complementos estén en el sistema de archivos local en relación con la aplicación.

MVVM requiere que usted entienda los roles. La "vista" es su XAML y código subyacente. El código subyacente debe manejar eventos del control del usuario, pero muy poco más que eso.

El ViewModel mantiene los datos que el control de usuario se unirá a. En general, ViewModel está vinculado a la vista como su DataContext, de modo que todo en el formulario puede enlazarse con las propiedades en ViewModel. ViewModel debe implementar INotifyPropertyChanged y elevar los eventos cambiados a la propiedad para cada propiedad a la que se vincule el formulario.

es probable que desee crear un ObservableCollection, utilizando un EntitySet como su fuente. Esto manejará INotifyCollectionChanged para fines de enlace de datos. Si las entidades en EntitySet también manejan INotifyPropertyChanged, entonces está en buena forma en el enlace de datos para las colecciones.

Puede crear una propiedad de una entidad individual, y databind a que, en el supuesto de que la notificación de cambio también se implementa (tanto para los miembros de la entidad, así como para la propiedad de entidad).

Servicios RIA regenerará la DomainContext en cada generación, lo que ayuda un poco en mantenerlo en sincronía. Sin embargo, su intención es ser una capa de servicio por encima de un ORM, por lo que su ORM u otro mapeo de datos tendrá que mantenerse por otros medios.

No he mirado en la versión final de Servicios RIA, pero no estaba muy impresionados con la versión beta. Prefiero tener buenas clases de entidades definidas en el servidor y compartirlas con el proyecto de Silverlight. Sin embargo, no es fácil de configurar y requiere un WCF no trivial que no dependa de referernces de servicio. (La versión final de RIA Services puede haber limpiado parte de esto, pero la referencia de servicio WCF nativa en Silverlight es bastante mala, principalmente porque no recrea clases generadas automáticamente, y codifica el URI para el servicio del servidor .)

Los metadatos eran otro problema con los servicios de RIA beta. Es más fácil adjuntar atributos de metadatos directamente a su clase DataContract y las propiedades individuales del DataMember, si controla el origen de la entidad. Nuevamente, eso puede significar no usar los Servicios de RIA. Escribir una clase de metadatos por separado, como se requería para la versión beta de RIA, no fue una buena solución.

que al final no usando Servicios RIA para Silverlight 3, y no me arrepentí. Aquí hay un excellent article on WCF and Silverlight. Aunque dice Silverlight 2, todavía está en el objetivo para cualquier lanzamiento de Silverlight.

Recomiendo MVVM Light. La fuente está disponible en Codeplex, si eso es un problema. Proporciona soporte de mensajería y comandos, así como ViewModelLocator; mientras que el último requiere un poco de trabajo para comprender, en realidad es una buena extensión del modelo MVVM básico.

Espero que esto ayude .....

+0

También hay una buena muestra de aplicaciones de negocios en ejecución usando MVVM y WCF RIA. Compruébelo aquí: http://intersoftpt.wordpress.com/2010/06/29/clientui-part-5-the-supercharged-silverlight-navigation/ –

2

Sólo pensé en hacerle saber acerca de un proyecto que estoy trabajando - acaba de conseguir nuestro primer lanzamiento hecho. Proporciona una forma muy sencilla de acercarse específicamente a MVVM para los servicios de Silverlight + RIA. Simplifica muchas cosas de MVVM y proporciona algunas funciones más similares a las de controlador con la clase de notificaciones. http://slmvvms.codeplex.com/

Cuestiones relacionadas