Para ser un programador Android todoterreno, definitivamente tenemos que aprender sobre las arquitecturas para Android que existen, y qué ventajas nos dan. Primero que todo, respondamos a una pregunta básica.
¿Qué es una arquitectura?
En resumen, es un conjunto de soluciones que estructuran un proyecto de forma ordenada, contempla varias cosas para su formación, como patrones de diseño, librerías, principios de programación, organización de carpetas, clases, y desde luego, todo pensando en la plataforma que se vaya a usar, por ejemplo, Android.
¿Qué ventajas tiene usar arquitecturas?
Aunque hay muchas ventajas al implementar arquitecturas para Android, vamos a listar las más sobresalientes a la hora de tomar una decisión.
- Reciclaje de clases o módulos. Cuando tenemos una arquitectura robusta, no solo podemos reciclar código en el mismo proyecto, en ocasiones podemos extraer y adaptar algún módulo en otro proyecto. Dependerá de qué tan parecidos sean los requerimientos claro, pero será relativamente fácil hacer una migración solida
- Reducción de documentación dentro del código. En lugar de comentar nuestro código en cada línea, o crear documentos por separado, una buena arquitectura hará nuestro código legible y entendible por su misma ubicación, nombramiento, y conexión
- Curva de aprendizaje menor en equipos de trabajo. Una vez que varios programadores aprenden la misma arquitectura, cualquier proyecto puede ser modificado por cualquier programador del equipo, con la misma calidad que el programador original
- Fácil ubicación de errores y reducción de los mismos. Entre más clases y métodos pequeños haya en un proyecto, menor será la cantidad de errores, pues solucionaremos todo grano a grano, en lugar de abrir el cofre y ver cientos de piezas. Además de un rastreo fácil, al punto de que cuando un veas el error en la interfaz, sabrás qué camino vigilar
- Software escalable. Es decir, un proyecto que fácilmente añade nuevas funciones y vistas, sin afectar al resto
- Mantenimiento seguro y flexible. No hay mucho más que decir, más claro, agua
- Mejoras en el testing. Una de las mayores ventajas, incluso si aún no implementas pruebas automatizadas en tus proyectos, es que tendrás todo preparado para cuando quieras llegar a ese nivel de profesionalidad
¿Qué desventajas hay?
De nuevo, aunque puede haber más, solo vamos a listar las más importantes para decidir si debemos o no implementar arquitecturas de software.
- Mayor tiempo al crear código nuevo. Sobre todo al principio puede resultar perezoso crear varias líneas de código para una consulta nueva a la base de datos, o crear un módulo nuevo solo por un diálogo de selección o confirmación, por ejemplo
- Mayor curva de aprendizaje para integrarse a un proyecto. Es común que muchos buenos programadores, incluso con varios años de experiencia, no sepan usar correctamente ni las arquitecturas más sencillas, por lo que será necesario capacitar a todos los programadores que se unan al equipo en este tema de las arquitecturas
La buena noticia es que ambas desventajas son de una única vez, en el sentido de que una vez dominada la arquitectura elegida, el flujo de trabajo es ágil y supone un ahorro de tiempo a largo plazo, a diferencia de los grandes problemas que tendríamos si no utilizásemos arquitecturas.
¿Qué arquitecturas de software existen para Android?
Como ya lo mencionamos antes, una arquitectura está comprometida directamente con la plataforma a la que va dirigida, y esto contempla el lenguaje de programación usado.
Para el caso de Android, tenemos 2 lenguajes principales, Java y Kotlin, pero Java cada día está en mayor desuso, por lo que vamos a listar solo aquellas arquitecturas que a día de hoy, están disponibles para Kotlin.
- MVP (Modelo-Vista-Presentador)
- MVVM (Modelo-Vista-Vista-Modelo)
- MVI (Modelo-Vista-Intención)
- Recommended Architecture (Basado en MVVM)
No he listado una de las más populares, me refiero a la Clean Architecture, y no la he puesto en la lista principal porque como tal no es una arquitectura, más bien es un conjunto de guías que pueden aplicarse a las arquitecturas antes mencionadas.
¿Qué sigue?
Te invito a profundizar en qué consisten las diferentes arquitecturas para Android aquí: ¿Cuál es la mejor arquitectura para Android con Kotlin?
Si te interesa saber más sobre el origen de las arquitecturas para Android (o en general, para otras plataformas), su importancia, y en qué consisten cada una de las variantes disponibles, te invito a leer el siguiente artículo: ¿Son necesarias las arquitecturas de software?
Así podrás tomar la decisión final sobre qué arquitectura para Android elegir en tus proyectos.
También puedes ver las primeras clases gratis sobre el curso en español más completo sobre las arquitecturas para Android, compatibles con XML y Jetpack Compose: Curso Arquitecturas para Android.
¡Fuerte abrazo!
Ing. Alain Nicolás Tello.
Cursos ANT.