¿Qué arquitectura es mejor para Android? ¿MVC, MVP o MVVM?
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 personal 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. Para ser honesto me gusta más MVP, aunque MVVM está prácticamente hecho para Android y es el que Google recomienda más. 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.
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.
- Su mayor 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 la app es para mi propio negocio me iría por MVP: En lo personal lo veo más estructurado y fácil de manejar y replicar, me ayuda a hacer las cosas más rápido.
- Si es una app para la empresa en la que trabajo usaría MVVM: Es más actual, 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. También te invito a visita mi blog Hackaprende donde incluyo cursos y artículos de 3 temas que me apasionan: Diseño, Programación y Emprendimiento.