Me doy cuenta de que esta pregunta es muy antigua, pero creo que puede ser útil para otros, como yo, que nos topamos con una búsqueda.
He estado trabajando en Android durante 9 meses desde un fondo del lado del servidor donde las pruebas unitarias completas y las arquitecturas en capas son comunes y funcionan bien.
A través de un montón de intentos de prueba y error, yo sugeriría encarecidamente utilizar el patrón Model View Presenter
, no el controlador de vista de modelo.
Un gran problema que he encontrado es que Activities
/Fragments
tienen un ciclo de vida que está fuera de su control y puede ocasionar problemas inesperados.
Por ejemplo, nuestra aplicación principal de Android desea ser utilizada en modo apaisado en tabletas. Hacemos esto en OnCreateView()
o OnCreate()
.
En un Nexus 7, la vista por defecto es vertical, entonces lo que sucede es que inicia la actividad en modo vertical, nuestro código dice ir a horizontal y finalmente android crea la clase activity
3 veces.
Hemos conectado solicitudes de red al onCreate
y terminan ocurriendo 3 veces en este caso.
Claro, podemos agregar lógica para buscar llamadas duplicadas, pero, en mi opinión, sería mejor, arquitectónicamente, tratar de dividir la interfaz de usuario de la lógica comercial.
Mi recomendación sería utilizar el patrón de fábrica para crear presentadores de la actividad, pero asegúrese de que la fábrica solo devuelva la misma instancia. El presentador puede entonces contener lógica para hacer solicitudes de red, buscar duplicados y devolver resultados en caché y lógica comercial general.
Cuando los resultados de las llamadas de red volver, ya sea posterior a un bus, como Otto cual la actividad (registrarse para el evento en onResume()
y dar de baja durante onPause()
) ha registrado, o hacer que la interfaz de devolución de llamada implementado por la actividad ha sido actualizado a la última actividad en el presentador.
De esta manera, el código en el presenter
hacia abajo se puede probar por unidad y no depende de la prueba de la capa UI escamosa.
Usted no está respondiendo su pregunta.Has respondido sobre la arquitectura de la interfaz de usuario. Creo que su pregunta es más sobre la arquitectura de aplicaciones globales: deberíamos crear capas separadas, como Presentación (= MVC), lógica de negocios y persistencia de datos. Este patrón es muy común en aplicaciones web. – clemp6r
De acuerdo con @ clemp6r. –