Arquitectura MVP: Implementación en Proyectos Android
Resumen
¿Cómo estructurar un proyecto con arquitectura MVP en Android?
La implementación de una arquitectura como Modelo-Vista-Presentador (MVP) puede parecer abrumadora al principio, pero con una guía clara, puedes lograr un diseño organizado y eficiente en tu aplicación Android. A continuación, exploramos la estructura básica para un proyecto que sigue esta arquitectura.
¿Qué componentes forman la base de la arquitectura MVP?
En una arquitectura MVP, desglosamos la funcionalidad de la aplicación en tres capas principales:
Modelo: Se encarga de la lógica de acceso a los datos, ya sea desde una base de datos local o una fuente en red.
Vista: Muestra la información al usuario y lo notifica de sus interacciones.
Presentador: Actúa como intermediario entre la Vista y el Modelo, manejando la lógica de la aplicación.
¿Cómo organizamos el proyecto en paquetes?
Para mantener nuestro proyecto organizado, utilizamos el siguiente esquema de paquetes:
vista (view en inglés): Contiene los fragmentos y actividades responsables de presentar la interfaz gráfica al usuario.
publicclassHomeFragmentextendsFragment{privateRecyclerView.Adapter favoriteTransferAdapter;privateProgressBar circularProgressBar;// Configuración de la vistaprivatevoidsetupView(){ favoriteTransferAdapter =newFavoriteTransferAdapter(); circularProgressBar =findViewById(R.id.progress_circular); circularProgressBar.setVisibility(View.GONE);}}
presentador (presenter en inglés): Alojamos aquí la lógica que maneja las interacciones entre la Vista y el Modelo.
interactor: En este paquete colocamos la gestión de comunicaciones con los datos.
publicclassHomeInteractor{publicList<FavoriteTransfer>getFavoriteTransfers(){// Implementación para obtener datosreturnnewArrayList<>();}}
¿Cómo asegurar una comunicación eficaz entre las capas?
Para garantizar una comunicación efectiva, definimos contratos (interfaces) para cada capa. Estos contratos especifican las funciones disponibles y se alojan en un paquete compartido.
¿Cómo implementar estos contratos en las clases correspondientes?
Implementamos los contratos en nuestras clases de la Vista y del Presentador. De este modo, aseguramos que cada clase cumple con las expectativas definidas para su función.
Con esta estructura básica, tu proyecto Android con arquitectura MVP estará bien organizado, asegurando una separación clara de responsabilidades y facilidad para el mantenimiento del código. ¡Continúa perfeccionando tus habilidades de arquitectura y verás cómo se fortalecen tus desarrollos móviles!
Muy bien explicado, me parece que le entendí más a Cristian que a Anahí, creo que para una persona que esta iniciando por primera vez esta bien enseñar detalladamente y explicar despacio. Excelent!
Coincido plenamente bro.
Se entendio super bien mvp pero yo creo que se puede organizar mejor las carpetas XD
Me parece interesante como en este proyecto se puede apreciar los principios de Clean Architecture al mostrar las entidades, los cuales fueron adaptados por MVP.
No obstante, tomando como referencia el curso de Arquitectura de Android(impartido por Anahí), me quedan las siguientes preguntas:
En esta clase se nombran las interfaces o composiciones de cada entidad como "contract", ¿por qué?
Pregunto este detalle por que que en el curso de Arquitectura de Android, las clases se identificaban bajo la palabra "...PresenterImpl" ("Impl" para especificar que son clases que implementan una interfaz) y a las interfaces como "...Presenter" y no como "Contract". Al fin y al cabo, ¿son las interfaces Presenter las que se comunican con los Interactors de model no?
Por otro lado, me pregunto, ¿por qué denominaron al paquete "model" como "data"? ¿MVP no demanda al desarrollador apegarse a una línea de buenas prácticas y por ende un estándar en el nombramiento de clases y directorios?
A todo esto, quisiera agregar que soy novato en la materia, y por lo tanto, mi objetivo es interiorizar estos conceptos de una manera clara y concisa. Agradezco a la comunidad por cualquier aporte que me pueda brindar.
Saludos
Hola Luis, me alegra mucho tu curiosidad y como aplicas lo aprendido de los demás cursos. Te cuento un poco.
Con referente a la primer pregunta, yo puedo crear **interfaces **dentro de interfaces, es decir, cuando hago el HomeContract y dentro creo View y Presenter, si lo vemos en términos de lectura, sabemos que ese View y ese Presenter hacen parte del caso de uso de Home, además creo estas dos clases bajo ese Contexto debido a que mi View y mi Presenter van a ser solo para ese caso de uso.
Ahora respondiendo a tu segunda pregunta, si vemos en el ejemplo, no existe muchos modelos sino por el contrario solamente data. Ambos son válidos pero un caso de uso real, donde existan abstracciones de datos en modelos, si podríamos cambiar el nombre del paquete. En el caso del ejemplo solamente traíamos un modelo. Espero te haya resuelto la duda! Nunca pares de aprender
Muy bueno el curso, hasta ahora muy práctico y bien explicado, veamos que sigue...
¿Podrías contarnos qué es lo que más te ha gustado del curso? ¿Cuál ha sido tu clase favorita?
Excelente curso! muy bien explicado como estructurar la arquitectura MVP..esperemos ver a este profesor en un nuevo curso! 👌
Impresionante profesor, se ha tomado el tiempo de explicar cosas especificas del lenguaje, que si ya sabes de POO lo vas a captar enseguida. Yo que no he visto los cursos de kotlin lo estoy entendiendo abstante bien. Además de explicar pausado y señalar malas practicas.
Wooow, habían comandos que yo desconocía y me alegro de conocerlos por fin :D
a la final, todo queda dentro de la carpeta ui, esto no estaría mal?
creo que todo queda igual pero fuera de la carpeta ui, ya que es solo para la ui
Hola Kevin, te recuerdo que el curso es de patrones de diseño, es decir ver los problemas comunes y resolverlo con estas estratégicas, no hice énfasis en los paquetes, si quieres aprender más sobre organización te invito a que veas este curso de Arquitectura de Android y clean architecture donde tienen más enfoque en eso
Estaría bueno si le sube al tamaño de la letra.. Creo que son más grandes la de las opciones de Android Studio que las del Editor
Muy bueno el curso, muy practico
¡Qué bueno que te esté gustando el curso! Cuéntanos ¿Cuál es tu clase favorita hasta los momentos?
estoy en el plan free, e ingrese a ver este curso... excelente la manera de enseñar del tutor.. me anima a suscribirme a este curso por completo..
Me agrada que se inicie con una base del proyecto y se vaya explicando poco a poco.
Los cambios que tenemos que hacer en el código los hacemos en la rama base_branch?
Al momento de refactorizar me dice "No elements to move are selected" y no me deja colocar nada en el campo de texto. Q hago?
!captura-de-pantalla
Hola Nicolás, no puedo ver tu captura de pantalla
no se que hacer llegue hasta aqui pero esa app que clonamos del repo no la entiendo ojala alguien que si la entienda me ayude
Hola!, cuentame un poco más específico que no entiendes, así te puedo ayudar de una forma mas eficiente.
tras descargar el proyecto al diciembre 2024, ciertas cosas han cambiado, de momento Jcenter() no se utiliza como fuente de repositorios, sino mavenCentral() muchas librerias fueron mudadas alli, y la libreria de circularProgressBar debe ser actualizada a version implementation 'com.mikhaellopez:circularprogressbar:3.1.0' sino no compila.
Realmente me impresiono la explicación del profesor con el MVP, felicidades, super comprendido :D
Excelente curso muy bien explicado!!
Exelente, me parece bueno el ritmo y le entendí un poco mas que anahí aun que me hubiera gustado que presentara el proyecto con mockups
IDOLO. Hasta ahora viene excelente. Paso a paso. Tomandose el tiempo necesitario para dar contexto a lo que va a exponer. IDOLO.