studio interactor example español java android design-patterns mvp android-project-template

java - interactor - mvp repository



Android MVP: ¿Qué es un interactor? (4)

¿Qué es un interactor? ¿Cómo encaja en el diseño MVP? ¿Cuáles son las ventajas / desventajas de usar un interactor frente a poner el código interactor en el presentador?



Interactor es una clase que separa la capa de dominio de la capa de presentación. En palabras simples, proporciona una forma de escribir la lógica empresarial por separado del código que se utiliza para manipular la interfaz de usuario (al vincular datos a la interfaz de usuario / animar / navegación).

Entonces Interactor es mediador entre Presenter / ViewModel y el patrón Repository.

No he usado el patrón Interactor en MVP, lo he usado en MVVM. Interactor se puede usar indistintamente para UseCases.

Por ejemplo, tomemos el caso de buscar categorías para mostrar en la lista (en el siguiente ejemplo, el presentador representa MVP y ViewModel representa el patrón MVVM).

  • View (Activity / Fragment) llamará al método Presenter / ViewModel para obtener categoryList.
  • Luego, Presenter / ViewModel llamará al método de interactor para obtener categoryList
  • Interactor llamará al método Repository (CategoryRepository) para obtener categoryList
  • El repositorio tendrá lógica para decidir si buscar categorías del servicio web (fuente de datos remota) o del almacenamiento de base de datos (fuente de datos local) o de la memoria caché (almacenamiento temporal; puede ser variable en la clase de repositorio).
  • El repositorio devolverá categoryList (obtenido de la fuente de datos seleccionada) a Interactor
  • Interactor procesará en categoryList (algunos formatos, etc.) y lo enviará a Presenter / ViewModel. Interactor puede enviar directamente la lista a Presenter / ViewModel si no se necesita procesamiento
  • Presenter / ViewModel llamará al método View con categoryList como parámetro
  • Ver mostrará categoríaLista con o sin animación

Tenga en cuenta que en este proceso se puede evitar Interactor, por lo que en lugar de usar el flujo de datos como este Repositorio-> Interactor-> Presentador / ViewModel , la comunicación puede realizarse mediante el Repositorio-> Presentador / ViewModel de esta manera. Aquí Presenter / ViewModel formará parte de la presentación, así como de la capa de dominio. Como dije anteriormente, Interactor actúa como separador de estas dos capas.

Estos son algunos blogs escritos de manera concisa para explicar este concepto como referencia.

Espero que esto lo ayude a comprender mejor el papel de Interactor. Feliz codificación !!!


MVP existe para abordar el problema de la actividad de Dios (una actividad / fragmento que tiene demasiadas líneas).

Si bien no era obligatorio (puede codificar en cualquier patrón que desee), muchos desarrolladores están de acuerdo en que MVP es adecuado para Android. Hace que su código fuente sea más limpio, comprobable, mantenible y robusto.

Puede pensar en un interactor como su "Modelo / Controlador". Un interactor obtendrá datos de su base de datos, servicios web o cualquier otra fuente de datos. Después de obtener los datos, el interactor enviará los datos al presentador. Por lo tanto, hacer cambios en su interfaz de usuario.

Las ventajas de usar interactor en una clase separada es que desacoplará su clase, haciéndola más limpia y comprobable. Claro, puedes poner el interactor en la clase interna de tu presentador, pero ¿cuál es el punto? Las desventajas de poner el interactor en su presentador es que hará que su clase de presentador sea más grande y relativamente más difícil de leer y administrar.

Actualización: Por supuesto, esto es solo una simplificación excesiva, si desea profundizar más, puede ver el blog de fernando cejas o el blog de antonio leiva


Personalmente uso View, Present e Interactor que para mí es diferente del modelo.

Puede pensar en un Interactor como una clase con métodos útiles para recuperar los datos de la base de datos, el servidor, etc. Después de obtener los datos, puede completar su modelo en el Interactor y devolverlo al Presentador.

Por ejemplo, puede tener un LoginInteractor que crea un Asynctask para autenticar al usuario y luego llenar el Modelo de usuario con los datos recibidos.