Patrones de aplicación de empresa mediante Xamarin.Forms eBookEnterprise Application Patterns using Xamarin.Forms eBook

Guía de arquitectura para desarrollar aplicaciones de empresa de Xamarin.Forms adaptables, fácil de mantener y comprobablesArchitectural 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), inserción de dependencias, navegación, validación y la administración de configuración, al tiempo que mantiene 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 instrucciones acerca de cómo realizar la autenticación y autorización con IdentityServer, acceso a datos desde 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 a quién 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 extender con el tiempo.Therefore, it's important to build an app so that it can be modified or extended over time. Diseñar para tal adaptabilidad puede ser difícil, pero normalmente implica crear particiones de una aplicación en componentes discretos y con acoplamiento flexible que pueden integrarse fácilmente juntos 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 modelo Model-View-ViewModel (MVVM) ayuda a separar la lógica de negocios y la presentación de una aplicación desde la interfaz de usuario (UI) de forma clara.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 lógica de la aplicación y la interfaz de usuario ayuda a solucionar problemas de desarrollo numerosas y puede hacer que una aplicación sea más fácil probar, mantener y desarrollar.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 oportunidades de reutilización de código y permite a los desarrolladores y diseñadores de interfaz de usuario más puedan colaborar 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

Inyección de dependencia 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 abstractos e interfaces y los tipos concretos que implementan o extienden 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 inyección de dependencia reducen el acoplamiento entre objetos por lo que proporciona una funcionalidad para crear instancias de clase y administrar 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 sus dependencias resuelve en primer lugar.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

El Xamarin.Forms MessagingCenter clase implementa la publicación-suscribirse patrón, que permita la comunicación basada en mensajes entre los componentes que son poco práctico vincular por referencias de objeto y el tipo.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 publicadores y suscriptores de comunicarse sin necesidad de una referencia a entre sí, lo que ayuda a reducir las dependencias entre los componentes, mientras que permite también componentes desarrollado y probado por separado.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 para la navegación en páginas, que normalmente tiene como resultado de la interacción del usuario con la interfaz de usuario o de la propia aplicación como resultado de cambios de estado interno controlado por la lógica.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, la navegación puede ser bastante complicada implementar en aplicaciones que usan el patrón MVVM.However, navigation can be complex to implement in apps that use the MVVM pattern.

Este capítulo se presentan un NavigationService (clase), que se usa para realizar la navegación por modelo basado en la 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 del modelo significa que la lógica puede realizarse a través de las 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 asegurarse de que se aplican ciertas reglas de negocios.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 datos proporcionados por 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, un usuario puede proporcionar datos a los que hace que la aplicación genere un error.Without validation, a user can supply data that causes the app to fail. La validación aplica reglas de negocios y evita que un atacante inserte datos malintencionados.Validation enforces business rules, and prevents an attacker from injecting malicious data.

En el contexto de los modelos ViewModel (MVVM) de patrón, un modelo de vista o modelo a menudo se requerirá a realizar la validación de datos y notificar los errores de validación a la vista para que el usuario puede corregirlos.In the context of the Model-ViewModel-Model (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

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 puede modificarse 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 del usuario sea la configuración de una aplicación personalizable que afectan al comportamiento de la aplicación y no requiere frecuente ajuste de nuevo.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

Microservicios ofrecen un enfoque de implementación que es adecuado para los requisitos de la agilidad, la escala y la confiabilidad de las aplicaciones modernas en la nube y el desarrollo de aplicaciones.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 microservicios es que puede ser escalado horizontal de forma independiente, lo que significa que se puede escalar un área funcional específica que requiere más procesamiento alimentación eléctrica o red de ancho de banda para admitir la demanda, sin ajuste de escala innecesariamente en áreas de la aplicación que no experimentan 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 a la integración de autenticación y autorización en una aplicación de Xamarin.Forms que se comunica con una aplicación web de 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 de identidad en contenedores que usa IdentityServer 4.Here, authentication and authorization are performed with a containerized identity microservice that uses IdentityServer 4. IdentityServer es un marco de trabajo de código abierto OAuth 2.0 y OpenID Connect de ASP.NET Core que se integra con la identidad de núcleo de ASP.NET 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 conocer cómo se implementan las operaciones que expone la API o datos.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 modelos y ver modelos desde aplicaciones de MVVM es idéntico a otras clases de las pruebas, y pueden utilizarse 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 determinados patrones que son típicos al modelo y clases de modelo de vista, que se pueden beneficiar de 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 es 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, pueden recibir un mensaje comentarios acerca de los libros electrónicos a dotnet-architecture-ebooks-feedback@service.microsoft.com .Alternatively, feedback about the eBook can be emailed to dotnet-architecture-ebooks-feedback@service.microsoft.com.