Estado del arte de Arquitecturas en Clientes Móviles al 2020

Estado del arte de Arquitecturas en Clientes Móviles al 2020

A la fecha, el ecosistema de las soluciones móviles puede contar para su implementación con una variada lista de estilos de arquitectura y patrones de diseños.

Lo primero a tener en cuenta es que el estilo de arquitectura y los patrones de diseño usados en su implementación son temas que si bien están relacionados, no significan lo mismo. Por ejemplo, en móviles existe una familia de patrones de diseño bien conocidos que son aplicados sobre la capa de presentación. Estos son los patrones MVC (Model View Controller), MVP (Model View Presenter), MVI (Model View Intent), MVVM (Model View View Model), MVVM ViewState, Redux, VIPER. Dichos patrones pueden ser utilizados en diferentes estilos de arquitectura tales como Clean Architecture o Hexagonal Architecture.

En algunos casos se tiende a confundir el uso de cierto patrón con la arquitectura de la aplicación, por ejemplo, decir que el uso del patrón MVVM tipifica la solución como una aplicación con Clean Architecture, es un malentendido a veces frecuente. Aplicar patrones tales como MVVM ayudan al cumplimiento de los lineamientos de Clean Architecture pero no definen el estilo de arquitectura en su totalidad. Clean Architecture es más que la aplicación de ciertos patrones, también involucra la aplicación de ciertas prácticas en el ámbito de diseño e implementación.

En ese orden de ideas, una aplicación diseñada bajo Clean Architecture, podría incluir patrones tales como MVP o MVI en lugar de MVVM y seguir dando cumplimiento con los lineamientos del estilo de arquitectura.

Ahora ¿Qué patrón se debería usar siempre para garantizar una buena implementación?


Todos los patrones son buenos candidatos, sin embargo la decisión de preferir un patrón sobre otro se toma basándose en el contexto de la solución misma, sobre la base de los requerimientos, al tipo de aplicación, a los equipos y a los estándares definidos en la compañía.

Cada patrón proporciona ciertas ventajas para enfrentar un problema, sin embargo podrían no ser suficientes para mitigar otros. Es así como a través de análisis y ponderación de objetivos se escoge el más adecuado. Difícilmente se tendrá un único patrón que solucione todos los problemas.

Ahora, también hay que mencionar que uno de los patrones mayormente aceptados en aplicaciones de gran escala ha sido el MVVM. Por ejemplo Android lo incorpora en su propuesta de Arquitectura, pero nuevamente reitero que no es la única alternativa.

¿Se podría combinar patrones de diseño en la capa de presentación?


Sí. Hasta donde la solución y su arquitectura lo permita no veo el impedimento de hacerlo. En las soluciones móviles se suele por lo general mencionar un único patrón de diseño aplicado, sin embargo si un determinado feature requiere un MVVM ViewState para el cumplimiento del requerimiento, entonces no habría por qué descartarlo.

No se trata de empezar a mezclar patrones y hacer un desastre de código, se trata de mantener un límite para evitar llegar a ser tan ortodoxos como para dejar sin herramientas flexibles a los equipos. Todo manejado en su debida proporción podría generar los resultados esperados.

Evolución de los patrones en la capa de presentación

La capa de presentación de los clientes y sobre todo la capa de presentación de los móviles ha venido cambiando en los últimos años. 

Por el lado de iOS, se ha agregado la tecnología SwiftUI para reemplazar los bien conocidos Storyboards/ViewControllers.

Android por su parte hace algo similar agregando Jetpack Compose, esto para reemplazar los bien conocidos Layouts/Activities.

Este cambio de tecnología abre la oportunidad a seguir aplicando los mismos patrones de diseño ya mencionados y proponer diseños con otros patrones buscando mayor flexibilidad y beneficios en la administración de los estados de las vistas.

De tal forma que el recorrido de los patrones en cuanto a capa de presentación ha sido básicamente de MVC a MVP, luego a MVVM o MVI y ahora a patrones de diseño que tienen como actor esencial el estado de la vista conocidos como Unidirectional State Flow (USF).

Este patrón tiene dos variantes de implementación, a través de Redux o a través de MVVM ViewState.

Ambos patrones para su implementación se fundamentan en el principio de máquina de estados. Sin embargo se debe aclarar qué MVVM ViewState no es USF puro. MVVM ViewState es una mejora que se le hace al patrón MVVM para darle prioridad al estado de la vista.

¿Han escuchado de Rx?¿Qué papel juega en este contexto RxSwift, RxJava, RxJS y otras extensiones?


Bien, podría decir que mucha importancia.

Las extensiones Rx permiten implementar muchos de los patrones que se han mencionado anteriormente. Por ejemplo, el patrón MVVM o el patrón Redux, o incluso el patrón MVVM ViewState.

Dichos patrones pueden ser de igual forma implementados sin usar las extensiones Rx, pero les garantizo que omitir el uso extensiones Rx podría ser una desventaja, sobre todo teniendo en cuenta la facilidad y velocidad que un equipo de desarrollo podría adquirir en la entrega de un feature.

Para finalizar. Esta ha sido una corta descripción de la actualidad con respecto a estilos de arquitecturas y patrones de diseño, enfocada más que todo a la capa de presentación. Se queda por fuera los otras capas y sus respectivos componentes tan importantes como Repositories, Uses Cases, Mappers, Cache Strategies, etc, para lo cual es mejor dedicarle un post aparte.

Clean Architecture in iOS, the English version. Also the Spanish version.





Previous
Next Post »
Thanks for your comment