16

Clean Architecture en Android y diferentes formas de aplicarlo

17003Puntos

hace 3 años

Anteriormente en mi blog “Pasa de Junior a Senior en Android con Clean Architecture” te compartía una introducción sobre cómo dar tu siguiente paso en tu carrera profesional al implementar una arquitectura en tus proyectos Android.

Ahora quiero hablarte sobre una de las preguntas más frecuentes al momento de trabajar con esta arquitectura y cómo abordarla, dependiendo de las necesidades de tus aplicaciones: ¿cuáles son las diferentes formas de aplicar Clean Architecture en mi proyecto?

Una vista general de Clean Architecture

En una arquitectura, cada capa tiene distintas responsabilidades. Si bien el número de capas dependerá de las especificaciones y necesidades de cada proyecto, las capas que te mostraré son muy frecuentes en la mayoría de los proyectos donde he colaborado:

Capa de presentación
Maneja las interacciones del usuario y presenta la información en pantalla. Muchos proyectos suelen mantener tanto las vistas (Activities, Fragments, Views, etc.) como sus intermediarios (Presenters si usan MVP, ViewModels si usan MVVM, etc.)

Capa de dominio
Siendo la capa central de este tipo de arquitectura, controla la lógica de negocio de la aplicación. En esta capa se encuentran también los modelos o entidades, así como los casos de uso o Interactors.

Capa de datos
Gestiona los datos de la aplicación. Es recomendable usar el patrón de repositorio para manejar los diferentes tipos de fuentes de datos (uso de servicios, caché, base de datos, etc.)

Diagrama1.png

Diagrama que muestra las dependencias en cada capa.

Diferentes enfoques a emplear

Existe una amplia gama de enfoques que puedes tener en mente para adaptar Clean Architecture en tus proyectos. Teniendo esto en mente, te explicaré las opciones más comunes:

Un módulo para concentrarlos a todos
Este es el más sencillo de los enfoques, ya que todas las capas se encuentran en un solo módulo, y con ello, todas las implementaciones quedan muy accesibles.

Desafortunadamente, un gran poder conlleva una gran responsabilidad: existe el riesgo de que accidentalmente se tenga acceso a clases de diferentes capas, rompiendo así varios lineamientos de Clean Architecture (puedes ver la sección de The dependency rule en el artículo de The Clean Code Blog). Además, si el proyecto va en crecimiento, escalar las funcionalidades se volvería complicado, ya que todo se seguirá concentrando en el mismo módulo.

Diagrama2.png

Diagrama que indica todas las capas dentro del módulo app.

Dividir por capas y vencer
La forma en la que podrías iniciar a dividir tu proyecto y ganar un mayor contexto es generando un módulo por cada capa. Con ello, tendrías una mayor visibilidad de la organización de tus clases en la capa de presentación, de dominio y de datos (Spoiler Alert: para fines didácticos, este es el enfoque del proyecto del curso).

Sin embargo, el tema de escalabilidad seguiría siendo un problema, ya que trabajar en nuevas funcionalidades podría impactar fácilmente en las que ya se encuentran desarrolladas.

Diagrama3.png

Diagrama que expone la representación de cada capa dentro de módulos independientes.

Una manera de mejorar este enfoque sería realizar la separación por funcionalidad o características en lugar de por capas.

Separación por características (features)
Con este enfoque, se tiene una perspectiva más clara sobre qué características y funcionalidades se están desarrollando en el proyecto, además de la separación por cada capa usando Clean Architecture. Esto proporciona muchas ventajas, incluyendo:

Independencia en el desarrollo y pruebas por cada feature.
Mejor control en las dependencias y bibliotecas por cada módulo

Uno de los inconvenientes que deberías considerar con esta aproximación es que el proyecto, al tener tantos módulos, puede volverse complicado, por lo que se requiere un análisis previo, no solo de los features que se implementan, sino también de los recursos compartidos, para así evitar duplicidad (clases base, cadenas de texto, etc.)

Diagrama4.png

Diagrama que ejemplifica el manejo de varios features con sus respectivas capas usando Clean Architecture.

Conclusión

Existen distintas maneras de implementar Clean Architecture en tus proyectos Android. Sin embargo, es necesario que consideres tanto las ventajas y desventajas de cada una de ellas.

Si estás interesado en ir al siguiente nivel para desarrollar aplicaciones Android con mejor estructura y calidad, te invito a tomar el Curso de Clean Architecture para Android, disponible ya mismo en Platzi.

¡Te espero en clase! Kudos 🚀

Referencias:
The Clean Code Blog.
Pasa de Junior a Senior en Android con Clean Architecture.
Multiple ways of defining Clean Architecture layers.
Adoption of Clean Architecture layers with modules.

Mauricio
Mauricio
Mhodroid

17003Puntos

hace 3 años

Todas sus entradas
Escribe tu comentario
+ 2
Ordenar por:
3
20456Puntos

Excelente articulo. Creo que lo mas dificil es compartir componentes y decidir que codigo se puede reutilizar o no, ademas de que tanto valor le dará al negocio emplear tiempo para hacerlo reutilizable

2
21885Puntos

Me gusta que además de compartir información de manera sintetizada y digerible, agrega al final las referencia en caso que queramos información más “cruda” por llamarlo de alguna manera, muy buena práctica.

2
22645Puntos

Excelente articulo sobre aspectos a considerar antes de implementar Clean Arquitecture no es solo que se deba implementar sino más bien que es conveniente para el proyecto

Me gustaría que hubieran más cursos de Android siento que han descuidado un poco esa carrera de Desarrollo de Aplicaciones Android.