Patrones de aplicación empresarial con el libro electrónico de Xamarin.Forms
Guía de arquitectura para desarrollar aplicaciones empresariales adaptables, fáciles de mantener y que se pueden probar
Xamarin.Forms 
Nota:
Este libro electrónico se publicó en la primavera de 2017 y no se ha actualizado desde entonces. Hay mucho en el libro que sigue siendo valioso, pero parte del material está obsoleto.
Este libro electrónico proporciona instrucciones sobre cómo implementar el patrón Model-View-ViewModel (MVVM), la inserción de dependencias, la navegación, la validación y la administración de configuración, al tiempo que se mantiene el acoplamiento flexible. Además, también hay instrucciones sobre cómo realizar la autenticación y autorización con IdentityServer, el acceso a los datos desde microservicios en contenedores y las pruebas unitarias.
Prefacio
En este capítulo se explica el propósito y el ámbito de la guía y a quién se dirige.
Introducción
Los desarrolladores de aplicaciones empresariales se enfrentan a varios desafíos que pueden modificar la arquitectura de la aplicación durante el desarrollo. Por lo tanto, es importante compilar una aplicación para que se pueda modificar o ampliar con el tiempo. Diseñar para esta adaptabilidad puede ser difícil, pero normalmente implica la creación de particiones de una aplicación en componentes discretos y de acoplamiento flexible que se pueden integrar fácilmente en una aplicación.
MVVM
El patrón Model-View-ViewModel (MVVM) ayuda a separar limpiamente la lógica de presentación y negocio de una aplicación de su interfaz de usuario (UI). Mantener una separación limpia entre la lógica de la aplicación y la interfaz de usuario ayuda a solucionar numerosos problemas de desarrollo y puede facilitar la prueba, el mantenimiento y la evolución de una aplicación. También puede mejorar enormemente las oportunidades de volver a usar el código y permite a los desarrolladores y diseñadores de interfaz de usuario colaborar más fácilmente al desarrollar sus respectivas partes de una aplicación.
Inserción de dependencias
La inserción de dependencias permite desacopase de tipos concretos del código que depende de estos tipos. Normalmente usa un contenedor que contiene una lista de registros y asignaciones entre interfaces y tipos abstractos, y los tipos concretos que implementan o extienden estos tipos.
Los contenedores de inserción de dependencias reducen el acoplamiento entre objetos al proporcionar una instalación para crear instancias de clase y administrar su duración en función de la configuración del contenedor. Durante la creación de objetos, el contenedor inserta en él las dependencias que el objeto requiere. Si esas dependencias aún no se han creado, el contenedor crea y resuelve primero sus dependencias.
Comunicación entre componentes débilmente acoplados
La Xamarin.FormsMessagingCenter clase implementa el patrón publish-subscribe, lo que permite la comunicación basada en mensajes entre componentes que no son convenientes para vincular por referencias de objeto y tipo. Este mecanismo permite a los publicadores y suscriptores comunicarse sin tener una referencia entre sí, lo que ayuda a reducir las dependencias entre los componentes, al tiempo que permite desarrollar y probar componentes de forma independiente.
Navegación
Xamarin.Forms incluye compatibilidad con la navegación por páginas, que normalmente es el resultado de la interacción del usuario con la interfaz de usuario o de la propia aplicación, como resultado de cambios de estado internos controlados por lógica. Sin embargo, la navegación puede ser compleja de implementar en aplicaciones que usan el patrón MVVM.
En este capítulo se presenta una clase , que se usa para realizar la navegación por el modelo NavigationService de vista por primera vez desde los modelos de vista. La colocación de la lógica de navegación en las clases de modelo de vista significa que la lógica se puede usar a través de pruebas automatizadas. Además, el modelo de vista puede implementar lógica para controlar la navegación para asegurarse de que se aplican ciertas reglas de negocios.
Validación
Cualquier aplicación que acepte la entrada de los usuarios debe asegurarse de que la entrada es válida. Sin validación, un usuario puede proporcionar datos que provocan un error en la aplicación. La validación aplica reglas de negocios e impide que un atacante inyecte datos malintencionados.
En el contexto del patrón Model-View-ViewModel (MVVM), a menudo se requiere un modelo de vista o modelo para realizar la validación de datos y señalar los errores de validación a la vista para que el usuario pueda corregirlos.
Administración de la configuración
Configuración permite la separación de datos que configura el comportamiento de una aplicación del código, lo que permite cambiar el comportamiento sin volver a generar la aplicación. La configuración de la aplicación son datos que una aplicación crea y administra, y la configuración de usuario es la configuración personalizable de una aplicación que afecta al comportamiento de la aplicación y no requiere un reajuste frecuente.
Microservicios en contenedores
Los microservicios ofrecen un enfoque para el desarrollo y la implementación de aplicaciones que se adapta a los requisitos de agilidad, escala y confiabilidad de las aplicaciones en la nube modernas. Una de las principales ventajas de los microservicios es que se pueden escalar horizontalmente de forma independiente, lo que significa que se puede escalar un área funcional específica que requiera más potencia de procesamiento o ancho de banda de red para admitir la demanda, sin necesidad de escalar áreas de la aplicación que no experimentan una mayor demanda.
Autenticación y autorización
Hay muchos enfoques para integrar la autenticación y autorización en una aplicación que se comunica con una Xamarin.Forms ASP.NET web MVC. En este caso, la autenticación y la autorización se realizan con un microservicio de identidad en contenedores que usa IdentityServer 4. IdentityServer es un marco de código abierto de OpenID Conectar y OAuth 2.0 para ASP.NET Core que se integra con ASP.NET Core Identity para realizar la autenticación de token de portador.
Acceso a datos remotos
Muchas soluciones modernas basadas en web usan servicios web, hospedados por servidores web, para proporcionar funcionalidad para aplicaciones cliente remotas. Las operaciones que expone un servicio web constituyen una API web y las aplicaciones cliente deben poder usar la API web sin saber cómo se implementan los datos u operaciones que expone la API.
Pruebas unitarias
Probar modelos y ver modelos desde aplicaciones MVVM es idéntico a probar cualquier otra clase, y se pueden usar las mismas herramientas y técnicas. Sin embargo, hay algunos patrones que son típicos para modelar y ver clases de modelo, que pueden beneficiarse de técnicas específicas de pruebas unitarias.
Community sitio
Este proyecto tiene un sitio de la comunidad, en el que puede publicar preguntas y proporcionar comentarios. El sitio de la comunidad se encuentra en GitHub. Como alternativa, los comentarios sobre el libro electrónico se pueden enviar por correo electrónico a dotnet-architecture-ebooks-feedback@service.microsoft.com .