La arquitectura es uno de los principales temas a abordar cuando inicias una nueva aplicación, como siempre trataré de evitar el «depende para qué lo quieras» y en 2 minutos te ayudaré a elegir cuál te conviene más para tu app.
Nota: Esta es mi opinión después de usar las 3 arquitecturas mencionadas.
En Android, la arquitectura MVC (Model-View-Controller) no funciona porque no está hecha para ello, las veces que lo he intentado mi código queda de 💩, no he encontrado como adecuarlo, mi recomendación es no implementar MVC con Android.
En cuanto a los otros dos (MVP y MVVM) he implementado ambos y los dos funcionan muy bien. En lo personal me gusta más MVVM, que es la más nueva y recomendada por Google, aunque la MVP no está nada mal y también tiene sus ventajas. Te dejo un resumen de las ventajas y desventajas que veo sobre ambos:
MVP (Model-View-Presenter):
Ventajas:
- Súper fácil de replicar, una vez que lo implementas para una activity o fragment casi es solo es copiar y pegar.
- La separación de código es muy clara.
- Gracias al punto anterior te permite hacer testing exhaustivo relativamente fácil.
- Una vez que lo entiendes lo puedes usar una y otra vez y se acomoda muy bien a casi cualquier tipo de aplicación.
- Es fácil de adaptar a apps que ya están construidas con código antiguo (Legacy), aunque sí se necesita bastante trabajo y tiempo.
Desventajas:
- Algo difícil de entender al principio.
- Necesitas muchas interfaces (y mucho código repetitivo), como consecuencia a veces es aburrido de implementar y hace que sea difícil buscar dónde se mandan llamar ciertos métodos con los shortcuts del teclado.
- No es compatible con algunas tecnologías nuevas de Android, como los Flows o los estados.
MVVM (Model-View-ViewModel)
Ventajas:
- Recomendado por los de Google y prácticamente hecho para Android, por si solo no es una ventaja pero podría ser que por ello agreguen mejoras a la técnica.
- Debido a lo anterior, es compatible con algunas tecnologías nuevas de Android, como los Flows o los estados, que te permiten hacer apps más robustas y abordar problemas que serían muy difíciles de abordar con otras arquitecturas, como por ejemplo descarga continua de datos. También es compatible con Jetpack Compose.
- Otra ventaja es que tiene herramientas para manejar el lifecycle de los activities y fragments, no tienes que estar cuidando esto. Por ejemplo, cuando usas MVP si no tienes cuidado es muy frecuente que la app truene si haces ciertas cosas después del onStop() del Activity, esta es la mayor ventaja que veo.
Desventajas:
- Se complican a propósito, necesitas hacer ciertas cosas que se podrían hacer de manera más fácil.
- No es tan replicable como el MVP, en cada Activity o Fragment donde lo uses tienes que hacer algunas cosas diferentes.
- Es difícil de adaptar a apps que ya están hechas, es decir, prácticamente es para aplicaciones nuevas.
- Para implementar MVVM en un Activity que traiga datos de internet, necesitas integrar al menos como 6 clases: Activity, ViewModel, Repository, Api, Dao, Model, uff 😪.
Bajo este análisis, lo que yo haría es lo siguiente:
- Si quieres hacer una app sencilla o si vas a trabajar en una empresa con una app con mucho código viejito usa MVP: En lo personal lo veo más estructurado y fácil de manejar y replicar, me ayuda a hacer las cosas rápido.
- Si es una app nueva o mas compleja usa MVVM: Es más actual, robusto, te hará actualizarte más por lo que luce mejor en el currículum y los de Google de seguro irán mejorando las técnicas.
¿Sabes cómo implementar las arquitecturas en Android? Te invito a dejar tus comentarios o dudas.
Esto aclara el panorama, muchas gracias
Me gustaLe gusta a 1 persona