Patrones de aplicación empresarial utilizando el libro electrónico de Xamarin.FormsEnterprise Application Patterns using Xamarin.Forms eBook

Guía de arquitectura para el desarrollo de Xamarin.Forms adaptables, fáciles de mantener y probar las aplicaciones empresarialesArchitectural guidance for developing adaptable, maintainable, and testable Xamarin.Forms enterprise applications

Este libro electrónico proporciona instrucciones sobre cómo implementar el patrón Model-View-ViewModel (MVVM), la inserción de dependencias, navegación, validación y la administración de configuración, manteniendo el acoplamiento flexible.This eBook provides guidance on how to implement the Model-View-ViewModel (MVVM) pattern, dependency injection, navigation, validation, and configuration management, while maintaining loose coupling. Además, también hay una guía sobre cómo realizar la autenticación y autorización con IdentityServer, acceso a datos de microservicios en contenedores y las pruebas unitarias.In addition, there's also guidance on performing authentication and authorization with IdentityServer, accessing data from containerized microservices, and unit testing.

PrefacioPreface

Este capítulo explica el propósito y el ámbito de la guía y quién lo está destinado a.This chapter explains the purpose and scope of the guide, and who it's aimed at.

IntroducciónIntroduction

Los desarrolladores de aplicaciones empresariales enfrentan a varios desafíos que pueden modificar la arquitectura de la aplicación durante el desarrollo.Developers of enterprise apps face several challenges that can alter the architecture of the app during development. Por lo tanto, es importante compilar una aplicación para que se puede modificar o extendido con el tiempo.Therefore, it's important to build an app so that it can be modified or extended over time. Diseño de la capacidad de dichos adaptación puede ser difícil, pero normalmente implica dividir una aplicación en componentes discretos y con acoplamiento flexible que pueden integrarse fácilmente entre sí en una aplicación.Designing for such adaptability can be difficult, but typically involves partitioning an app into discrete, loosely coupled components that can be easily integrated together into an app.

MVVMMVVM

El patrón Model-View-ViewModel (MVVM) ayuda a separar la lógica de negocios y la presentación de una aplicación desde su interfaz de usuario (UI).The Model-View-ViewModel (MVVM) pattern helps to cleanly separate the business and presentation logic of an application from its user interface (UI). Mantener una separación clara entre la interfaz de usuario y la lógica de aplicación ayuda a abordar numerosos problemas de desarrollo y hacer más fácil probar una aplicación, mantener y evolucionar.Maintaining a clean separation between application logic and the UI helps to address numerous development issues and can make an application easier to test, maintain, and evolve. Se pueden mejorar enormemente las oportunidades de reutilización de código y permite a los desarrolladores y diseñadores de interfaz de usuario más colaboran fácilmente al desarrollar sus respectivos partes de una aplicación.It can also greatly improve code re-use opportunities and allows developers and UI designers to more easily collaborate when developing their respective parts of an app.

Inserción de dependenciasDependency Injection

Inserción de dependencias permite la separación de tipos concretos desde el código que dependa de estos tipos.Dependency injection enables decoupling of concrete types from the code that depends on these types. Normalmente usa un contenedor que contiene una lista de registros y las asignaciones entre tipos e interfaces abstractos y los tipos concretos que implementan o amplían estos tipos.It typically uses a container that holds a list of registrations and mappings between interfaces and abstract types, and the concrete types that implement or extend these types.

Contenedores de inserción de dependencia reducen el acoplamiento entre objetos por lo que proporciona una funcionalidad para crear instancias de clase y administra su duración en función de la configuración del contenedor.Dependency injection containers reduce the coupling between objects by providing a facility to instantiate class instances and manage their lifetime based on the configuration of the container. Durante la creación de objetos, el contenedor inserta las dependencias que requiere el objeto en él.During the objects creation, the container injects any dependencies that the object requires into it. Si aún no se han creado esas dependencias, el contenedor crea y resuelve primero sus dependencias.If those dependencies have not yet been created, the container creates and resolves their dependencies first.

Comunicación entre componentes débilmente acopladosCommunicating Between Loosely Coupled Components

Xamarin.Forms MessagingCenter clase implementa la publicación-patrón, que permite la comunicación basada en mensajes entre los componentes que no son convenientes para vincular mediante referencias de objeto y el tipo de suscripción.The Xamarin.Forms MessagingCenter class implements the publish-subscribe pattern, allowing message-based communication between components that are inconvenient to link by object and type references. Este mecanismo permite a los publicadores y suscriptores transmitir sin tener una referencia entre sí, lo que ayuda a reducir las dependencias entre componentes, mientras que permite que los componentes que se desarrollan y prueban de forma independiente.This mechanism allows publishers and subscribers to communicate without having a reference to each other, helping to reduce dependencies between components, while also allowing components to be independently developed and tested.

Xamarin.Forms incluye compatibilidad con la navegación de página, que normalmente da como resultado de la interacción del usuario con la interfaz de usuario o de la aplicación, como resultado de los cambios de estado controlado por la lógica interna.Xamarin.Forms includes support for page navigation, which typically results from the user's interaction with the UI, or from the app itself, as a result of internal logic-driven state changes. Sin embargo, navegación puede ser difícil de implementar en las aplicaciones que usan el patrón MVVM.However, navigation can be complex to implement in apps that use the MVVM pattern.

Este capítulo presenta un NavigationService (clase), que se usa para realizar la navegación de model first de vista de modelos de vista.This chapter presents a NavigationService class, which is used to perform view model-first navigation from view models. Colocar en la vista lógica de navegación clases de modelo significa que la lógica puede realizarse a través de pruebas automatizadas.Placing navigation logic in view model classes means that the logic can be exercised through automated tests. Además, el modelo de vista, a continuación, puede implementar la lógica para controlar el desplazamiento para garantizar que se apliquen determinadas reglas empresariales.In addition, the view model can then implement logic to control navigation to ensure that certain business rules are enforced.

ValidaciónValidation

Cualquier aplicación que acepta entradas de los usuarios debe asegurarse de que la entrada es válida.Any app that accepts input from users should ensure that the input is valid. Sin validación, el usuario puede proporcionar datos a los que hará que la aplicación producirá un error.Without validation, a user can supply data that causes the app to fail. La validación aplica las reglas de negocios y evita que un atacante inserta datos malintencionados.Validation enforces business rules, and prevents an attacker from injecting malicious data.

En el contexto de Model-View-ViewModel (MVVM) de patrón, un modelo de vista o modelo a menudo se requerirá para realizar la validación de datos y señalar los errores de validación a la vista para que el usuario puede corregirlos.In the context of the Model-View-ViewModel (MVVM) pattern, a view model or model will often be required to perform data validation and signal any validation errors to the view so that the user can correct them.

Administración de configuracionesConfiguration Management

La configuración permite la separación de datos que se configura el comportamiento de una aplicación desde el código, lo que permite el comportamiento que se puede cambiar sin volver a generar la aplicación.Settings allow the separation of data that configures the behavior of an app from the code, allowing the behavior to be changed without rebuilding the app. Configuración de la aplicación es datos que una aplicación crea y administra y configuración de usuario es la configuración de una aplicación personalizable que afectan al comportamiento de la aplicación y no requiere el ajuste de volver a frecuentes.App settings are data that an app creates and manages, and user settings are the customizable settings of an app that affect the behavior of the app and don't require frequent re-adjustment.

Microservicios en contenedoresContainerized Microservices

Los Microservicios ofrecen un enfoque al desarrollo de aplicaciones e implementación que se adapte a los requisitos de agilidad, escalabilidad y confiabilidad de aplicaciones modernas en la nube.Microservices offer an approach to application development and deployment that's suited to the agility, scale, and reliability requirements of modern cloud applications. Una de las principales ventajas de los microservicios es que pueden ser escaladas horizontalmente de forma independiente, lo que significa que se puede escalar un área funcional específica que requiere más procesamiento de energía o ancho de banda para admitir la demanda, sin escalado innecesariamente áreas de la aplicación que no está experimentando una mayor demanda.One of the main advantages of microservices is that they can be scaled-out independently, which means that a specific functional area can be scaled that requires more processing power or network bandwidth to support demand, without unnecessarily scaling areas of the application that are not experiencing increased demand.

Autenticación y autorizaciónAuthentication and Authorization

Existen muchos enfoques para integrar la autenticación y autorización en una aplicación de Xamarin.Forms que se comunica con una aplicación web ASP.NET MVC.There are many approaches to integrating authentication and authorization into a Xamarin.Forms app that communicates with an ASP.NET MVC web application. En este caso, la autenticación y autorización se realizan con un microservicio en contenedor de identidad que usa 4 IdentityServer.Here, authentication and authorization are performed with a containerized identity microservice that uses IdentityServer 4. IdentityServer es un marco de código abierto de OAuth 2.0 y OpenID Connect para ASP.NET Core que se integra con ASP.NET Core Identity para realizar la autenticación de token de portador.IdentityServer is an open source OpenID Connect and OAuth 2.0 framework for ASP.NET Core that integrates with ASP.NET Core Identity to perform bearer token authentication.

Acceso a datos remotosAccessing Remote Data

Muchas soluciones modernas basadas en web hacen uso de servicios web, hospedadas por servidores web, para proporcionar funcionalidad de cliente remoto a aplicaciones.Many modern web-based solutions make use of web services, hosted by web servers, to provide functionality for remote client applications. Las operaciones que expone un servicio web constituyen una API web y aplicaciones de cliente deben ser capaces de usar la API web sin necesidad de saber cómo se implementan los datos o las operaciones que expone la API.The operations that a web service exposes constitute a web API, and client apps should be able to utilize the web API without knowing how the data or operations that the API exposes are implemented.

Pruebas unitariasUnit Testing

Probar los modelos y los modelos de vista de las aplicaciones MVVM es idéntica a las pruebas de otras clases, y se pueden usar las mismas herramientas y técnicas.Testing models and view models from MVVM applications is identical to testing any other classes, and the same tools and techniques can be used. Sin embargo, hay algunos patrones típicos de modelo y las clases de modelo de vista, que pueden beneficiarse de las técnicas de pruebas de unidad específica.However, there are some patterns that are typical to model and view model classes, that can benefit from specific unit testing techniques.

ComentariosFeedback

Este proyecto tiene un sitio de la Comunidad, en el que puede publicar preguntas y proporcionar comentarios.This project has a community site, on which you can post questions, and provide feedback. El sitio de la Comunidad se encuentra en GitHub.The community site is located on GitHub. Como alternativa, se pueden enviar comentarios sobre el libro electrónico a dotnet-architecture-ebooks-feedback@service.microsoft.com .Alternatively, feedback about the eBook can be emailed to dotnet-architecture-ebooks-feedback@service.microsoft.com.