studio patron modelo medium example ejemplo datos arquitectura android android-fragments android-activity design-patterns mvp

android - patron - Múltiples actividades/fragmentos y el patrón Model View Presenter



patron de arquitectura android (2)

Creo que está bien tener un presentador dentro de la actividad. Básicamente la actividad es como un controlador, debe saber sobre el presentador.

Sería un error colocar un presentador dentro de un fragmento si la actividad u otro fragmento también lo necesita. Puede poner un presentador dentro de un fragmento solo si este presentador está diseñado específicamente para fragmento.

que el presentador almacena como WeakReference y puede invocar los métodos de interfaz relevantes al devolver un resultado

¿Por qué necesitas una WeakReference aquí? Si tienes una relación 1: 1, supongo que tu presentador no tiene su propio ciclo de vida, lo que significa que su ciclo de vida depende de la actividad o el fragmento. No hay riesgo de tener pérdidas de memoria porque no es un singleton, ¿verdad? Debería ser seguro tener una referencia fuerte.

No estoy seguro de haber respondido tu pregunta porque me parece un poco amplia. Mi punto es que los fragmentos son solo "partes" de la actividad separadas y debes tratarlos como partes. Si el presentador pertenece solo a esta parte, entonces debe estar adentro. De lo contrario, debería estar en actividad. Tiene razón sobre el uso de una interface para acceder a la actividad, este es un enfoque de diseño conocido que Google utiliza en sus ejemplos.

En primer lugar, sé que con Model View Presenter existen diferentes implementaciones, y en mi mente, siempre y cuando tenga las capas de abstracción claramente definidas y cumpliendo los roles asignados, entonces la forma de implementar este patrón está abierta a la interpretación. He estado implementando este patrón en bastantes aplicaciones donde solo había una Activity . Ahora comencé un nuevo proyecto que tiene múltiples actividades y Fragments adjuntos, incluidos fragmentos anidados ( ViewPager ).

Ahora trato de traducir el MVP a este proyecto y me he topado con una pared de concepto y me gustaría obtener alguna guía e información.

Hasta ahora he creado la estructura anterior y comencé a hacer una relación 1: 1 con View & Presenter (independientemente de la Activity o Fragment ). Siento que esto está bien, sin embargo si, por ejemplo, envié una solicitud para hacer algo desde una Vista de Activity a su Presentador, que devuelve un resultado a la Vista de Activity ¿cómo voy a propagar el resultado, es decir, actualizar todas las demás Actividades / Fragmentos? que actualmente no están en estado Paused() o Stop() . Siento que en este caso debería haber un Presentador central que actualice todas las Vistas de Fragmentos y Actividad necesarias, pero no estoy seguro de cómo hacerlo.

Actualmente, cuando se crea cada Activity y Fragment , crea una nueva instancia de una clase Presenter, pasando en sí mismo como referencia (las Actividades y Fragmentos implementan sus propias interfaces), que el presentador almacena como WeakReference y puede invocar los métodos de interfaz relevantes cuando devolviendo un resultado.

De acuerdo con los documentos cada vez que los Fragments quieran comunicar entre sí y con la Activity adjunta, debe usar una interfaz de devolución de llamada. Con esto en mente, debería tener una interfaz de devolución de llamada que implemente la Actividad y la devolución de llamada de Fragments cada vez que soliciten algo, por lo que en esencia solo la Actividad tendría una capa de Presentador y Modelo a la que los Fragmentos tendrían que devolver una llamada para realizar varias solicitudes ?

Lo siento si esto suena un poco confuso, espero que esto sea lo suficientemente claro como para entender lo que quiero lograr, y si estoy pensando en la línea correcta ... ¡o totalmente fuera de lugar!


No, ya no hay interfaz. O bien utiliza RxJava Observables para actualizar todas las vistas como se describe aquí o algún tipo de Bus ( Otto -deprecated o EventBus ). Y te gustará porque hacen que interactuar sea muy fácil.