03 Model-View-ViewModel



Documentos relacionados
Almacenamiento virtual de sitios web HOSTS VIRTUALES

- MANUAL TÉCNICO - Implantación de software de Marketing Online

Patrones de Diseño Orientados a Objetos 2 Parte

- MANUAL TÉCNICO - Software de diagnóstico de la seguridad de la información y autoimplantación de LOPD. Rev. 01- FEBRERO 2013

SIEWEB. La intranet corporativa de SIE

INTRODUCCION. entidades. Modelo lógico de la base de datos. Matricula. carne. codigo_curso. año semestre nota. propiedades

Novedades. Introducción. Potencia

Programación páginas web con ASP.NET 3.5 (C#)

Curso de Java POO: Programación orientada a objetos

Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

En este ejemplo también vamos a crear la capa Entidades que va a servir para modelar nuestra base de datos.

Capa de red de OSI. Semestre 1 Capítulo 5 Universidad Cesar Vallejo Edwin Mendoza emendozatorres@gmail.com

Práctica sobre compartición de instancias remotas.

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

Programación orientada a objetos

PROGRAMACIÓN ORIENTADA A OBJETOS Master de Computación. II MODELOS y HERRAMIENTAS UML. II.2 UML: Modelado de casos de uso

(PHP y APACHE), y el programa de comunicación Skype, para controlar de manera

El lenguaje de programación Java

INSTALACIÓN, OPERACIÓN Y PROGRAMACIÓN DE EQUIPOS Y SISTEMAS TELEFÓNICOS

SISTEMAS DE INFORMACIÓN II TEORÍA

Guía de instalación de la carpeta Datos de IslaWin

Consultas con combinaciones

Objetivo: Introducción conceptual y aplicación básica de los lenguajes del lado del servidor.

Programación Orientada a Objetos con Java

Modelo de Objetos Distribuidos

Novedades en Q-flow 3.02

EXAMEN FINAL Metodología y Programación Orientada a Objetos. Curso Cuatrimestre de otoño. 17 de Enero de 2011

Visual Studio 2008 es el conjunto de herramientas de

Arquitectura de sistema de alta disponibilidad

Windows Server 2012: Infraestructura de Escritorio Virtual

Componentes de Integración entre Plataformas Información Detallada

Programación en Capas con VB.net y PostgreSQL

Introducción a Visual Studio.Net

Instalación y configuración de Windows SharePoint Services (WSS) 2003

Patrones para persistencia (I) Ingeniería del Software II

TEMA 2. CARACTERÍSTICAS DEL LENGUAJE VISUAL BASIC

MACROS. Automatizar tareas a través del uso de las macros.

Sesión 23. Luisa Fernanda Rincón Pérez

Ejercicios - Persistencia en Android: ficheros y SQLite

Introducción a la programación orientada a objetos

COMERCIO ELECTRÓNICO UNA INTRODUCCIÓN GENERAL

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

Service Oriented Architecture: Con Biztalk?

Software de administración de impresoras MarkVision

LICITACIÓN N L13045 NUEVO SISTEMA LEY DE TRANSPARENCIA

Windows Server 2012: Identidad y Acceso. Módulo 2: Descripción General de Windows Server 2012 Remote Desktop Services.

Capítulo 5. Cliente-Servidor.

QUE ES COMLINE MENSAJES? QUE TIPO DE MENSAJES PROCESA COMLINE MENSAJES?

MANUAL DEL USUARIO PRINCIPAL

Guía rápida para crear cursos en Aulas virtuales

Acronis License Server. Guía del usuario

Ejercicios - Persistencia en Android: proveedores de contenidos y SharedPreferences

Operación Microsoft Access 97

Capítulo VI. Estudio de Caso de Aplicación del Integrador de Información Desarrollado

UNIDAD 2: Abstracción del Mundo real Al Paradigma Orientado a Objetos

SOLUCION PARCIAL TASK SCHEDULER. Task Scheduler

La utilización de las diferentes aplicaciones o servicios de Internet se lleva a cabo respondiendo al llamado modelo cliente-servidor.

MANUAL SINCRONIZADOR LEKOMMERCE FACTUSOL

Los mayores cambios se dieron en las décadas de los setenta, atribuidos principalmente a dos causas:

UNIVERSIDAD CATOLICA DE COLOMBIA FACULTAD DE INGENIERIA DE SISTEMAS

Estrategia de Cómputo en la Nube. Servicios en la Nube

Aplicaciones Web con Delphi

1

Entre los más conocidos editores con interfaz de desarrollo tenemos:

Preguntas más frecuentes sobre PROPS

Parallels Plesk Sitebuilder

Novedades en Gestión de Expedientes (9 junio 2015)

Lo que usted necesita saber sobre routers y switches. Conceptos generales.

JAVA EE 5. Arquitectura, conceptos y ejemplos.

CAPITULO 8. Planeamiento, Arquitectura e Implementación

" ##$ % & '( % & )*+),$ -##$ -!- $! "-./ - 0WebClass1-2

LiLa Portal Guía para profesores

En los últimos años, se ha presentado una enorme demanda por servicios portátiles,

Ejercicio 1 (3 puntos).-

Fundamentos de programación Estudia las estructuras de control y cómo definir funciones en JavaScript.

ADO.NET. Arquitectura de ADO.NET

P r e g u n t a s m á s F r e c u e n t e s :

VISIÓN GENERAL HERRAMIENTAS COMERCIALES

Escritorios virtuales

WebSphere es una familia de productos de software propietario de IBM

REGISTRO DE EMPRESAS Y PERSONAS BASE DE INFORMACIÓN DE CLIENTES & CONTACTOS

UNIVERSIDAD COOPERATIVA DE COLOMBIA POSTGRADO MULTIMEDIA PARA LA DOCENCIA ELECTIVA I CREACIÓN DE AMBIENTES VIRTUALES

Windows Server 2012: Infraestructura de Escritorio Virtual

Microsoft SQL Server Conceptos.

Soporte y mantenimiento de base de datos y aplicativos

Almacenamiento virtual de sitios web HOST VIRTUALES

PRUEBAS DE SOFTWARE TECNICAS DE PRUEBA DE SOFTWARE

CAPITULO 9. Diseño de una Base de Datos Relacional Distribuida

SCT Software para la calibración de transductores de fuerza. Versión 3.5. Microtest S.A.

Manual Exchange Online

Manual de usuario Versión: 1.3 Edición: 05/02/2015 1

GUÍA Nro. 1 TECNOLOGÍA DE INTERNET. TIII PIII

Utilidades de la base de datos

INDICE Parte I: Qué es Visual Foxpro Capitulo 1: Características del Producto

Learnanywhere. Nuestra plataforma de aprendizaje para los niños.

Qué necesito saber para tener mi sitio web en Internet?

Oficina Online. Manual del administrador

Programación Orientada a Objetos en C#.NET CAPÍTULO 8 E V E N T O S. Ing. Bruno López Takeyas, M.C.

Transcripción:

03 Model-View-ViewModel

Temas del curso Creación de aplicaciones para Windows 8 y Windows Phone 8 Jump Start 01 Comparando Windows 8 y Windows Phone 8 02 Conceptos básicos de modelos de vista 03 MVVM ( (Model-View-ViewModel) 04 Código compartido B

Model-View-ViewModel

Agenda Introducción a MVVM (Model View-ViewModel) Librerias MVVM Arquitectura Q&A Pros y contras Código compartido con MVVM.NET portable class library Mejores prácticas MVVM Light Toolkit

Introducción a MVVM

Introducción a la arquitectura: Qué es MVVM? MVVM es un patrón de arquitectura de software Al igual que muchos patrones, promueve la reutilización de código a través de separaciones de preocupaciones y modularidad Una aplicación MVVM se divide en tres partes principales: El Modelo almacena y mantiene los datos del programa En la vista se presentan los datos y recibe el usuario de entrada a través de una interfaz de usuario de la plataforma personalizada y UX El ViewModel presenta una interfaz para enlazar los datos a los dictámenes Cada parte se acopla de manera muy informal Reutiliza el modelo y ViewModel a través de plataformas, pero no la vista

Arquitectura View Enlace de datos Comandos View Eventos /Mensajes ViewModel ViewModel Mensajes, rellamadas Modelo

Pros y Contras No todas las aplicaciones deben utilizar MVVM... Sopesar los pros y los contras y decidir el mejor enfoque para su escenario Pros Contras Se puede reutilizar el código del modelo y el modelo de vista a través de plataformas Un montón de código repetitivo El código tiene una estructura claramente definida Prueba el ViewModel con pruebas unitarias Mantenibilidad Puedes mostrar los datos en tiempo de diseño en Expression Blend y el diseñador de Visual Studio Puede ser más poderosa de lo necesario para ciertas aplicaciones El desacoplamiento pierde una fuerte comprobación de tipos

Código compartido usando MVVM

MVVM y Código Compartido En esta sección se examinan algunos de los detalles de MVVM Además, un vistazo a la biblioteca de clases portátiles Por último, algunas de las mejores prácticas al utilizar MVVM Incluye una descripción general de cada parte de MVVM Model, View, and ViewModel El énfasis en aquellas partes que facilitan el intercambio de código Enlace de datos Comandos Mensajes

Model El Model, o el Data Model, almacena los datos persistentes para una aplicación Puede ser bases de datos, archivos de almacenamiento locales, ajustes, o cualquier otro dato persistentes Responsable de crear, recuperar, actualizar y eliminar operaciones Model no debe saber nada acerca de View o ViewModel Por lo general, la parte más portátil de la aplicación Windows Phone 8 es compatible con una base de datos local de SQL Server CE Windows 8 no es así, pero las bibliotecas SQLite están fácilmente disponibles

Model public class CommonDataItem public DataItem(string uid) Uid = uid; public string Uid get; private set; // Other properties... public interface IDataService void GetItem(Action<CommonDataItem> callback, string uid); public class DataService : IDataService public void GetItem(Action<CommonDataItem> callback, string uid) // Retrieve the data from the actual source //... var item = new DataItem(...); callback(item);

View Un View debe presentar al usuario una interfaz para ver y manipular los datos Una aplicación puede tener muchos Views Views están definidos por XAML El enlace de datos se conecta de Views a ViewModels Aún posible escuchar manualmente los cambios y actualizar las Views y el Model desde el código subyacente - No es la mejor manera de mantener un View hasta al día En MVVM, la View no se ocupa de las acciones del usuario Esa es la responsabilidad del ViewModel

ViewModel Un ViewModel, o PresentationModel, es responsable de: La presentación de datos a la vista En respuesta a las manipulaciones de usuario de la vista El enlace de datos puede aliviar la labor de actualización de la vista El ViewModel mantiene la lógica empresarial de la aplicación Desconectada de View Permite a los desarrolladores trabajar en el ViewModel mientras que los diseñadores trabajan en la Vista

ViewModel Una aplicación puede tener muchos ViewModels Por lo general, un uno-a-uno entre Views y ViewModels Un ViewModel está vinculado a un View mediante el establecimiento de DataContext propiedad de un elemento de View Esta unión es heredado por todos los elementos secundarios

ViewModel public class MainViewModel : ViewModelBase private readonly IDataService _dataservice; public const string Title_PropertyName = "Title"; private string _title = string.empty; public string Title get return _title; set if (_title == value) return; _title = value; RaisePropertyChanged(Title_PropertyName); // Constructor... public MainViewModel(IDataService dataservice) _dataservice = dataservice; _dataservice.getdata( (item) => Title = item.title; );

Sobre la demostración La demostración de esta presentación utiliza la aplicación PhotoManager. Presenta MVVM bien. El PhotoManager también se utilizará para demostraciones en la siguiente presentación. PhotoManager.Win8 PhotoManager.WP8 PhotoManager.Core.Win8 PhotoManager.Core.WP8 Shared

Demo: MVVM

Enlace de datos El enlace de datos es crítico para el patrón MVVM Vincula el View a el ViewModel Puede ser una sola vez, de una sola vía, o el enlace de dos vías Ventajas: Escribe menos código para actualizar la vista Más fácil de probar la unidad El acoplamiento débil evita chocar la aplicación Puede proporcionar datos en tiempo de diseño para el diseñador

Comandos En MVVM, los comandos permiten la vista de decirle al ViewModel para ejecutar código como respuesta a una acción del usuario Sustituye el paradigma de registro de eventos en la vista. Implementa la interfaz System.Windows.Input.ICommand Los comandos se pueden activar y desactivar - Levanta el evento CanExecuteChanged cuando esto sucede

Comandos class AddItemCommand : ICommand ViewModel _viewmodel; public AddItemCommand(ViewModel viewmodel) _viewmodel = viewmodel; public event EventHandler CanExecuteChanged; public bool CanExecute(object parameter) return true; public void Execute(object title) _viewmodel.additem(title as string); En el fragmento de XAML, asegúrate de que el DataContext se establece en una instancia de la clase ViewModel. La clase ViewModel expone una propiedad AddCommand de tipo AddItemCommand El ViewModel es responsable de tener que añadir un nuevo elemento <Button Command="Binding AddCommand" CommandParameter="Untitled" Content="Button" HorizontalAlignment="Center" VerticalAlignment="Center"/>

Mensajes Los mensajes son una forma de enviar información entre objetos. Remitente y el receptor Útil para la comunicación entre ViewModels A menudo, una devolución de llamada para cuando se hace el receptor manipular un mensaje No incorporada en la API, pero algunas bibliotecas MVVM proporcionan apoyo Por qué enviar mensajes? Supongamos que dos ViewModels están asociadas a una sola vista - Cada ViewModel se encarga de una parte de la view Quieres acciones recibidas por uno ViewModel que se pasan a otro

Mensajes public abstract class BaseViewModel : INotifyPropertyChanged private IMessenger _messenger; public IMessenger Messenger get return _messenger; set if (_messenger!= null) Unsubscribe(); _messenger = value; Subscribe(); protected virtual void Unsubscribe() protected virtual void Subscribe() protected void PublishMessage<TMessage>(TMessage message) if (Messenger!= null) Messenger.Publish<TMessage>(message); //... public interface IMessenger void Subscribe<TMessage>(Action<TMessage> handler); void Unsubscribe<TMessage>(Action<TMessage> handler); void Publish<TMessage>(TMessage message);

Mensajes public class MessageRecipient public MessageRecipient() Messenger.Default.Register<MyMessage>(this, async (msg) => var dlg = new MessageDialog(msg.Content); await dlg.showasync(); ); public class MyMessage : MessageBase public string Content get; set; var _recipient = new MessageRecipient(); //... Messenger.Default.Send<MyMessage>(new MyMessage() Content = "Hello World!" );

.NET Portable Class Library Visual Studio 2012 proporciona una plantilla de biblioteca de clases portátiles Sólo lcross-platform.net APIs disponibles Compila en una biblioteca independiente (.dll) Sólo el código administrado Sólo está disponible en las ediciones no Express de Visual Studio 2012

Mejores Prácticas Aplicaciones de diseño para la portabilidad entre plataformas Usa MVVM para ayudar a lograr este Mantenga los componentes de una aplicación imprecisa La separación de las preocupaciones - Cada componente tiene un papel único bien definido Evita dependencias entre Model, View, ViewModel Plan de actualizaciones, rediseños y pruebas Una vez más, considera MVVM u otra arquitectura de acoplamiento flexible

Mejores Prácticas El enlace de datos debería eliminar gran parte del código en el archivo de código subyacente Algunos de código subyacente está bien, pero buscar la manera de utilizar los comandos de enlace de datos y sustituir este código. Evita la unión de la misma colección grande varias veces en la misma página XAML Esto se aplica a los pivotes así. Evite duplicar enlaces a diferentes páginas dinámicas que forman parte de la misma dinámica. El enlace incurre en la memoria y la sobrecarga de la CPU, así que ten cuidado con la cantidad de datos está enlazado a una página.

Mejores Prácticas Las grandes colecciones con destino a la lista controles deben ser virtualizados Usted puede utilizar el VirtualizingStackPanel en lugar del StackPanel Tu puedes reducir el alcance del contexto de datos de la unión en el documento XAML. Por ejemplo: Un objeto Car expone un objeto Engine a través de una propiedad llamada "CarEngine" Un coche expuesto por la propiedad "MyCar" (de la vista de modelo) es el contexto de datos para un elemento XAML Los elementos secundarios de ese elemento XAML pueden cambiar de contexto de datos a la CarEngine estableciéndola en MyCar.CarEngine. Esto ayuda a evitar los caminos de propiedad largas.

Librerias MVVM

Numerosas herramientas disponibles Source: Wikipedia Jan, 2013

MVVM Light Toolkit Marco de código abierto creado y mantenido por GalaSoft Las librerias incluyen plantillas de Visual Studio Descarga en: http://mvvmlight.codeplex.com / Admite una aplicación ligera del patrón MVVM Adecuado para medianas y grandes proyectos Dos partes de la libreria Esenciales: RelayCommand, Messenger, ViewModelBase Extras: EventToCommand, DispatcherHelper

Resumen

Resumen MVVM significa Model-View-ViewModel El Model almacena los datos persistentes La View presenta al usuario una interfaz para ver y manipular datos Un ViewModel presenta datos a la vista y responde a las acciones del usuario MVVM es un patrón útil para Windows Phone 8 (y Windows 8) que permite reutilizar gran parte de la lógica de negocio de las aplicaciones Evite causar el caos en el ViewModel cuando reemplace la Vista MVVM funciona bien con otras estrategias de reutilización de código entre plataformas: Librerias portátiles, la herencia, las clases parciales, archivos de código compartido, #si los bloques

Q&A