Patrones de aplicación empresarial con el libro electrónico Xamarin.Forms

Guía de arquitectura para desarrollar aplicaciones empresariales de Xamarin.Forms que se pueden probar y son adaptables y fáciles de mantener

Enterprise Application Patterns using Xamarin.Forms eBook

Nota:

Este libro se publicó en la primavera de 2017 y no se ha actualizado desde entonces. Hay mucho en el libro que sigue siendo valioso, pero algunos de los materiales están obsoletos.

En este libro electrónico se proporcionan instrucciones sobre cómo implementar el patrón Modelo-Vista-Modelo de vista (MVVM), la inserción de dependencias, la navegación, la validación y la administración de configuración, a la vez que se mantiene un acoplamiento débil. Además, incluye indicaciones para llevar a cabo la autenticación y la autorización con IdentityServer, acceder a datos de microservicios contenedorizados y realizar pruebas unitarias.

Prefacio

En este capítulo se explica el propósito y el ámbito de la guía, y a quién está dirigida.

Introducción

Los desarrolladores de aplicaciones empresariales se enfrentan a diferentes dificultades que pueden alterar la arquitectura de la aplicación durante el desarrollo. Por eso es tan importante crear una aplicación que se pueda modificar o extender con el tiempo. Diseñar esta capacidad de adaptación puede ser complicado, y suele requerir la partición de una aplicación en componentes discretos y acoplados de manera imprecisa que puedan integrarse fácilmente en una aplicación.

MVVM

El patrón Modelo-Vista-Modelo de vista (MVVM) ayuda a separar limpiamente la lógica de presentación y de negocios 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 abordar numerosos problemas de desarrollo y facilita la prueba, el mantenimiento y la evolución de una aplicación. También puede mejorar considerablemente las oportunidades de reutilización del código y permite a los desarrolladores y a los diseñadores de la 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 desacoplar 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 proporcionando un recurso 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 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 clase MessagingCenter de Xamarin.Forms implementa el patrón de publicación y suscripción, lo que permite la comunicación basada en mensajes entre los componentes que no se recomienda vincular mediante referencias de tipo y objeto. Este mecanismo permite a los publicadores y suscriptores comunicarse sin que exista una referencia entre sí, lo que ayuda a reducir las dependencias entre los componentes, a la vez que permite desarrollar y probar esos componentes de forma independiente.

Xamarin.Forms incluye compatibilidad con la navegación por páginas, que normalmente surge a partir de la interacción del usuario con la UI o de la propia aplicación, como resultado de los cambios de estado internos causados por la 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 ha descrito una clase NavigationService, que se usa para realizar la navegación de la página con prioridad para el modelo de vista desde modelos de vistas. Si se coloca la lógica de navegación en las clases de modelo de vista, la lógica se puede revisar mediante pruebas unitarias. Además, el modelo de vista puede implementar lógica para controlar la navegación y así asegurar que se aplican determinadas reglas del negocio.

Validación

Cualquier aplicación que acepte la entrada de los usuarios debe asegurarse de que la entrada sea válida. Sin validación, un usuario puede proporcionar datos que hacen que se produzca un error en la aplicación. La validación aplica reglas de negocio y evita que un atacante inserte datos malintencionados.

En el contexto del patrón Modelo-Vista-Modelo de vista (MVVM), a menudo se necesitará un modelo o un modelo de vista para realizar la validación de los datos e indicar cualquier error de validación en la vista para que el usuario pueda corregirlo.

Administración de configuración

La configuración permite la separación de datos que configura el comportamiento de una aplicación desde el 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 del 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 es adecuado para 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 requiere más capacidad de procesamiento o ancho de banda de red para atender la demanda sin escalar innecesariamente á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 la autorización en una aplicación de Xamarin.Forms que se comunica con una aplicación web de ASP.NET MVC. Aquí, la autenticación y la autorización se realizan con un microservicio de identidad contenedorizado que usa IdentityServer 4. IdentityServer es un marco de código abierto de OpenID Connect y OAuth 2.0 para ASP.NET Core que se integra con ASP.NET Core Identity para realizar la autenticación de tokens de portador.

Acceso a datos remotos

Muchas soluciones modernas basadas en web hacen uso de servicios web, hospedados en servidores web, para proporcionar funcionalidad a las 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 o las operaciones que la API expone.

Pruebas unitarias

Probar modelos y modelos de vista de aplicaciones MVVM es idéntico a probar cualquier otra clase y se pueden usar las mismas herramientas y técnicas. Sin embargo, algunos patrones típicos para modelar y ver las clases del modelo se pueden beneficiar de técnicas específicas de las pruebas unitarias.

Sitio de la comunidad

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.