2010-08-05 15 views
15

Me gustaría iniciar una colección de Mejores prácticas de MVVM-light (con RIA Services). Hay una serie de artículos que considero que son buenas prácticas útiles o los mejores enfoques, pero me gustaría saber de otros que usan el juego de herramientas MVVM-light y ver también lo que han encontrado.MVVM-light + Mejores prácticas de RIA Services

Por favor, publique sus mejores prácticas como respuestas a esta pregunta.

+3

Considere la posibilidad de convertir esto en una wiki de la comunidad para que cualquiera pueda editar. –

+0

No lo consideraría como un com-wiki. El asker merece la reputación de esta buena pregunta. – Shimmy

Respuesta

25

uso básico de MVVM Light-

  1. inicializar el DispatcherHelper en función Application_Startup del archivo App.cs
  2. Crear ViewModels del BaseClass
  3. siempre crean una clase ViewModelLocator, que contiene todos sus modelos de vista y está vinculado en su aplicación Recursos
  4. Utilice los Comandos de retransmisión para exponer Funciones en su vista
  5. Aprenda a usar DispatchHelper.

Clean-Up Ideas:

  1. Cuando sea apropiado, añadir a su modelo de vista para despejar EntitySet de su DomainContext en la limpieza()?
  2. Llame a la función CleanupSomeVM() de su ViewModelLocator para borrar los modelos de vista cuando ya no se necesiten activamente en la aplicación.

Me encantaría saber de otros sobre cuándo y cómo utiliza las funciones de limpieza. A medida que mi aplicación crece, siento la necesidad de agregar algunas funciones de limpieza para administrar mejor el uso de la memoria del cliente.

Por capacidad de mezclado:

  1. Abstract las implementaciones del servicio/de consulta a una interfaz.
  2. crear 2 clases para cada clase de servicio de aplicación (1, 1 para el Diseño de Producción)
  3. Dentro de su cada modelo de vista, poner en práctica su propia clase de servicio (uso IsInDesignMode) para crear implementaciones de servicios combinable según sea necesario.
  4. Use una variable estática para mantener su DomainContext dentro de la Clase de Implificación del Servicio.
  5. Agregue DispatcherHelper.Initialize() en el constructor de ViewModels, pero solo cuando se encuentre en modo de diseño. La mezcla no carga la aplicación al cargar una página, y esto funciona alrededor de eso.

Para Agregado de lógica de negocios:

  1. añadir lógica de negocio en el modelo primero, y luego en el modelo de vista.
  2. Utilice los métodos parciales del Modelo para agregar lógica para los eventos de cambio/actualización apropiados.
  3. Agregue propiedades de solo lectura (solo getter) para proporcionar valores resumidos y calculados en su modelo.

Por Vistas:

  1. en vincular siempre a la raíz del localizador de objetos.
  2. Trate de mantener la lógica de código subyacente únicamente en el diseño o en la lógica de IU personalizada. Evite hacer referencia a su ViewModel.

Por Colecciones:

  1. Uso CollectionViewSource para las colecciones en sus ViewModels, con una fuente de la DomainContext EntitySet
  2. Aplicar todas filtrar, ordenar y agrupar lógica a la CollectionViewSource en su modelo de vista.
  3. Después de ServiceCalls, llame a .View.Refresh() en sus objetos CollectionViewSource según sea necesario para actualizar la interfaz de usuario.

Para la coordinación ViewModel (Controlador Lógico)

  1. utilizar mensajes con moderación, demasiada complejidad puede ser difícil de manejar.
  2. Utilice las clases NotificationMessage y PropertyChangedMessage para Enviar/Recibir.

Por RIA DomainServices:

  1. implementar cualquier registro en la función de persistir los cambios, no la actualización/insertar/borrar la lógica.
  2. Durante las funciones Insertar, Actualizar, Eliminar, si necesita hacer referencia a otra entidad a través de Propiedades de navegación, primero compruebe el EntityStatus o cargue la entidad desde otro contexto para evitar conflictos entre EntityStatus.

para la depuración/Pruebas:

  1. comprueban la ventana de salida para errores de encuadernación y solucionarlos. Los errores de enlace fallan silenciosamente para el usuario, pero degradan el rendimiento de la aplicación y el comportamiento esperado.
  2. Crear pruebas unitarias en Silverlight para verificar cualquier agregado modelo lógico/de negocios
  3. Crear proyecto de prueba unitaria para poner a prueba la lógica del lado del servidor y funciones

Para Entity Framework:

  1. Mantenga 1- to-1 Match of EntitiesContext to Domain Service. Intentar dividir esto de otra manera causa problemas.
  2. NO use el atributo [Composición] a menos que tenga la intención de dedicar mucho tiempo a crear cuidadosamente su lógica Insertar, Actualizar y Eliminar.
  3. Utilice un servicio por separado para enviar tipos personalizados a su Cliente RIA. No los agregue a su DomainService para su EntityFramework Object
  4. Realice la lógica de actualización/integración del lado del servidor (como la actualización de otros sistemas) en la función PersistChangeSet, no en las funciones Insertar, Actualizar, Eliminar.Esto evitará que accidentalmente ingrese una entidad a través de Propiedades de navegación, lo que dejará su versión separada no actualizada.
  5. Crea un contexto adicional para encontrar los valores actuales durante la actualización/lógica de integración.