¿Es útil el esquema Model-View-Presenter (MVP) para Android?

34

Cómo separar View y Presenter en Android, mientras que las reacciones sobre las acciones del usuario (parte del presentador de MVP) se configuran en las mismas actividades que muestran los elementos de la GUI (View part of MVP).

"En el presentador de vista de modelo, tal como dicen Martin Fowler o Michael Feathers [2], la lógica de la interfaz de usuario se divide en una clase llamada presentador, que maneja todas las entradas del usuario y que le dice a la vista" tonta "qué y cuándo display "(citado desde aquí ).

Hasta ahora, pensé que una de las principales características de Android es la actividad inteligente que toma medidas, reacciona a ellas y muestra los resultados. ¿El esquema MVP está en contradicción con la filosofía de Android? ¿Tiene sentido tratar de realizarlo en Android? En caso afirmativo, ¿cómo podría hacerse?

Gangnus
fuente
2
+1 Buena pregunta porque todavía no he visto mvp / mvvm en las fuentes de aplicaciones de Android. Sería interesante ver ejemplos de Android mvp y cuánto código / lib sobrecarga producen. Este problema no se discutió en Stackoverflow recomienda-maneras-para-producir-aplicación-portátil-entre-android-y-otras-plataformas
k3b
Tal vez, podría ponerlo en Stackoverflow, ¿o sería contrario a las reglas?
Gangnus
Puede pedirle a uno de los administradores que migre esta pregunta en lugar de duplicar la Qestion. Aquí en programmerslas preguntas hay preguntas más controvertidas "¿en qué piensas ../es bueno o malo ...?", Mientras stackoverflowque sería más como "¿Hay ejemplos de mvp en Android"? Para mí ambos lugares están bien.
k3b
Lamento mucho mi desventura, pero hasta ahora no he encontrado una manera de conectarme con los administradores :-(
Gangnus
Esta pregunta NO es adecuada para Stack Overflow. Por cierto, puedes contactar a los moderadores marcando tu publicación usando el enlace "marcar".
ChrisF

Respuestas:

15

Las aplicaciones de Android se basan fundamentalmente en Model-View-Controller (MVC): MVP suena igual, aunque no he escuchado el término antes. Las actividades cumplen la función de controlador, las vistas XML son solo eso (aunque puede compilarlas mediante programación en la actividad, es más fácil y sencillo hacerlo en XML) y el modelo que usted mismo escribe. Entonces sí, ese modelo es bastante práctico.

Una posible razón por la que es posible que no haya escuchado mucho sobre este modelo de diseño es que el marco de Android lo obliga a separar la vista. Debido a que la aplicación en dispositivos móviles tiende a ser pequeña, las personas no tienden a usar MVC completo; tienden a las capas de vista y acción, donde la capa de acción realiza gran parte del trabajo (pequeño) del modelo.

Si está escribiendo una aplicación multiplataforma, es posible que desee ver un enfoque de cuatro capas: Ver, Acción, Lógica empresarial y Modelo. Las capas Vista y Acción serían específicas de la plataforma, mientras que la Lógica y el Modelo de Negocio no cambiarían. Básicamente, divide la interacción entre el presentador y el usuario en la capa Acción, que llama a la capa Lógica empresarial para realizar la acción que el usuario desea.

Michael K
fuente
+1! Por favor, ¿podría dar una referencia o dos a algunos buenos textos sobre él?
Gangnus
44
Pensé que MVP le ofrece la oportunidad de mantener la Actionplataforma de capa (= Presentación) también independiente, al menos, cuando sus diferentes plataformas ofrecen capacidades de IU similares.
Doc Brown
@DocBrown En teoría, sí. En la práctica, no estoy seguro de que alguna vez sea posible, porque las interacciones del usuario podrían afectar la vista o el presentador. Por ejemplo, en Android los deslizamientos son manejados por la actividad, pero en las páginas web serían manejados por la vista (navegador).
Michael K
12
"Las aplicaciones de Android se basan fundamentalmente en Model-View-Controller". Eso es incorrecto en muchos niveles, lo siento. La arquitectura del marco de Android se basa en las Clases de Dios donde la lógica de Vista / Controlador está abarrotada.
Igor Filippov
2
Ojalá pudiera votar el comentario de @ IgorFilippov más de una vez. La idea de que las aplicaciones de Android implementen MVC por diseño es un error común. Contrariamente a iOS, Android no impone una arquitectura GUI con una clara separación de preocupaciones y permitiendo un modelo aislado y fácilmente comprobable. Debe proporcionar uno usted mismo, ya sea MVP, MVC u otra cosa.
Piovezan
6

No tengo ninguna experiencia en programación de Android, pero al echar un vistazo a algunos tutoriales introductorios de programación de Android, no veo una razón por la cual MVP debería ser menos útil como en cualquier otro marco de eventos. La Activityclase no es muy diferente de Dialogo Formen otros marcos, por lo que debería ser fácil crear una clase de "Presentador de actividades" para cualquier subclase de actividad de su aplicación y poner la lógica central allí.

Los eventos enviados a su "Actividad" deben delegarse en su presentador, y si su presentador va a enviar eventos por su cuenta o llamará a otras funciones dependientes del sistema, su Actividad debe proporcionar funciones relacionadas a través de la interfaz que comparte con el presentador. Pero eso es básicamente lo mismo que en cualquier otro marco GUI que conozco.

Doc Brown
fuente
+1 gracias por tu tiempo. Pero como puede ver en otra respuesta, en Android se usa un modelo similar, pero diferente. "¡Hablé en prosa durante 50 años y no lo sabía!" Ahora intentaré ver las diferencias de los modelos.
Gangnus
44
@Gangnus: MVP es una forma especial de MVC, aquí codebetter.com/jeremymiller/2007/07/26/… encontrará más información. Y estoy bastante seguro de que no se trata de "MVC o MVP". Las actividades pueden ser una forma de "controlador", pero dependen de la plataforma. La separación de la lógica de la interfaz de usuario a una clase de presentador independiente de la plataforma para cada actividad probablemente las hará más fáciles de probar y más portátiles.
Doc Brown
5

MVP es definitivamente útil para Android. Ayuda a organizar y probar su código en la unidad. Y la mejor parte es que las personas nuevas que lean su código podrán entender el código y comenzarán a contribuir pronto cuando sepan qué debe ir a dónde. Aquí hay un enlace muy útil para entender MVP con ejemplos .

Aquí hay una breve explicación de los tres componentes de MVP

Ver

En el MVP de Android, una vista contiene dos cosas Actividad: Vista de recursos de Android: Actividad de la interfaz de Java Implementa la Vista y se inyecta a sí misma (Interfaz de vista) en el presentador para que el presentador pueda hablar de la actividad usando la interfaz de vista. Los primeros tres bloques del diagrama muestran la comunicación entre View y The Presenter.

Presentador

Presentador actúa como una capa intermedia entre Ver y Datos / Modelo. Ver (Actividad) ordena al presentador que presente algo y el presentador toma datos de la base de datos / Modelo y devuelve la forma presentable de datos a la Vista. Ver luego se encarga de mostrar esos datos en la pantalla. Y recuerde que Presenter es una clase simple de Java, no debe incluir ninguno de los componentes de Android; de lo contrario, dificultará la prueba unitaria del presentador.

Si desea utilizar la base de datos en el presentador, haga una actividad, cree una instancia de base de datos e inyéctela en el presentador. Esto lo ayudará a burlarse de la base de datos durante las pruebas unitarias y le permitirá probar la lógica empresarial.

Modelo

El modelo en MVP no es más que su fuente de datos. La vista no habla directamente con los datos, sino que le ordena al Presentador que maneje los datos y devuelva la información que se puede mostrar sin ninguna otra modificación.

Ajit Singh
fuente
1
La información es útil, gracias, pero se da de mala manera. No solo debes citar un sitio, incluso el tuyo, sino dar información aquí. Las respuestas de referencia no están permitidas. Use comentarios en su lugar. No lo estoy marcando solo por la información útil en su sitio. Por favor, cámbielo a un comentario o ponga en la respuesta información clave que responda al cuerpo de la pregunta. Entonces seguramente obtendrá no solo mi plus, sino incluso la verificación de respuestas.
Gangnus
@Gangnus He proporcionado la información necesaria en la respuesta porque poner todo el contenido hará que la respuesta sea muy grande.
Ajit Singh
1
En realidad, hay dos tipos de MVP. Ver pasiva (lo que usted describe aquí) y Supervisión de presentador, que permite el enlace de datos directo de la vista para el modelo (como MVVM y muchos marcos web MVC).
RubberDuck