uso básico de MVVM Light-
- inicializar el DispatcherHelper en función Application_Startup del archivo App.cs
- Crear ViewModels del BaseClass
- siempre crean una clase ViewModelLocator, que contiene todos sus modelos de vista y está vinculado en su aplicación Recursos
- Utilice los Comandos de retransmisión para exponer Funciones en su vista
- Aprenda a usar DispatchHelper.
Clean-Up Ideas:
- Cuando sea apropiado, añadir a su modelo de vista para despejar EntitySet de su DomainContext en la limpieza()?
- 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:
- Abstract las implementaciones del servicio/de consulta a una interfaz.
- crear 2 clases para cada clase de servicio de aplicación (1, 1 para el Diseño de Producción)
- 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.
- Use una variable estática para mantener su DomainContext dentro de la Clase de Implificación del Servicio.
- 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:
- añadir lógica de negocio en el modelo primero, y luego en el modelo de vista.
- Utilice los métodos parciales del Modelo para agregar lógica para los eventos de cambio/actualización apropiados.
- Agregue propiedades de solo lectura (solo getter) para proporcionar valores resumidos y calculados en su modelo.
Por Vistas:
- en vincular siempre a la raíz del localizador de objetos.
- 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:
- Uso CollectionViewSource para las colecciones en sus ViewModels, con una fuente de la DomainContext EntitySet
- Aplicar todas filtrar, ordenar y agrupar lógica a la CollectionViewSource en su modelo de vista.
- 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)
- utilizar mensajes con moderación, demasiada complejidad puede ser difícil de manejar.
- Utilice las clases NotificationMessage y PropertyChangedMessage para Enviar/Recibir.
Por RIA DomainServices:
- implementar cualquier registro en la función de persistir los cambios, no la actualización/insertar/borrar la lógica.
- 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:
- 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.
- Crear pruebas unitarias en Silverlight para verificar cualquier agregado modelo lógico/de negocios
- Crear proyecto de prueba unitaria para poner a prueba la lógica del lado del servidor y funciones
Para Entity Framework:
- Mantenga 1- to-1 Match of EntitiesContext to Domain Service. Intentar dividir esto de otra manera causa problemas.
- 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.
- Utilice un servicio por separado para enviar tipos personalizados a su Cliente RIA. No los agregue a su DomainService para su EntityFramework Object
- 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.
- Crea un contexto adicional para encontrar los valores actuales durante la actualización/lógica de integración.
Considere la posibilidad de convertir esto en una wiki de la comunidad para que cualquiera pueda editar. –
No lo consideraría como un com-wiki. El asker merece la reputación de esta buena pregunta. – Shimmy