android - que - cómo puedo compartir una aplicación
Arquitectura de aplicaciones de Android: ¿cuál es el modelo sugerido? (5)
Aquí hay un proyecto dedicado para planos de arquitectura Android con códigos fuente bien documentados. Todos ellos se basan en el patrón de MVP con varios giros. También verifique la comparison de varias soluciones basadas en líneas de código, capacidad de prueba, costo de aprendizaje, su compatibilidad para aumentar la complejidad de los datos. Depende de la aplicación especialmente desarrollada y del contexto (tiempo de comercialización, desarrolladores, planes futuros, etc.) que mejor se adapte a los planos.
Del mismo modo, una aplicación web o de escritorio puede tener tres o n niveles: interfaz de usuario, empresa, datos, por ejemplo, ¿cuál es la estructura sugerida para una aplicación de Android? ¿Cómo se agrupan las clases, qué capas tienes, etc.?
Acabo de iniciar Android dev (una aplicación basada en Internet que debe responder a las notificaciones entrantes) y no tengo una idea real de la estructura a la que me refiero. Sugerencias apreciadas.
En mi humilde opinión, Android "quiere" seguir un patrón MVC, pero la vista y el controlador en general están muy unidos a las actividades.
Hace la prueba unitaria más difícil y es difícil obedecer al Principio de Responsabilidad Individual .
Encontré una muy buena arquitectura de Android presentada aquí , podría haber una idea. Todo está vagamente acoplado, es mucho más fácil de probar y editar.
Obviamente, estoy seguro de que hay muchas otras posibilidades (como el patrón MVP ( Model View Presenter ), y aquí hay respuestas que hablan de MVP en Android ), pero aún debes echarle un vistazo.
Las acciones, vistas y actividades en Android están preparadas para trabajar con la IU de Android y son una implementación de un patrón de modelo de vista de modelo, que es estructuralmente similar (en la misma familia) controlador de vista de modelo.
Según mi leal saber y entender, no hay forma de salir de este modelo. Probablemente se puede hacer, pero es probable que pierda todos los beneficios que tiene el modelo existente, y tiene que volver a escribir su propia capa de interfaz de usuario para que funcione.
Puedes encontrar MVC en los siguientes:
- Usted define su interfaz de usuario en varios archivos XML por resolución / hardware, etc.
- Usted define sus resources en varios archivos XML por configuración regional, etc.
- Puede almacenar datos en SQLite o sus datos personalizados en la carpeta / assets /, lea más sobre recursos y activos
- Extiende clases como ListActivity , TabActivity y hace uso del archivo XML por inflaters
- Puede crear tantas clases como desee para su modelo, y tener sus propios paquetes, que actuarán como una estructura
- Muchos Utils ya han sido escritos para ti. DatabaseUtils, Html,
No hay un patrón MVC único al que puedas obedecer. MVC simplemente afirma más o menos que no debe mezclar datos y ver, por lo que, por ejemplo, las vistas son responsables de almacenar datos o las clases que están procesando datos están afectando directamente a la vista.
Pero, sin embargo, la forma en que Android maneja las clases y los recursos, a veces incluso te obligan a seguir el patrón de MVC. Más complicado en mi opinión son las actividades que a veces son responsables de la vista pero que, sin embargo, actúan como un controlador al mismo tiempo.
Si define sus vistas y diseños en los archivos xml, cargue sus recursos desde la carpeta res, y si evita más o menos combinar estas cosas en su código, entonces de todos modos siga un patrón MVC.
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 muchos intentos de prueba y error, yo sugeriría encarecidamente usar el patrón Model View Presenter
, no Model View Controller.
Un gran problema que he encontrado es que las 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 quiere ser utilizada en modo paisaje en tabletas. Hacemos esto en OnCreateView()
o OnCreate()
.
En un Nexus 7, la vista predeterminada es vertical, entonces lo que sucede es que inicia la actividad en modo retrato, nuestro código dice "ir al paisaje" y ¡Android finalmente crea la clase de activity
3 veces!
Hemos conectado las solicitudes de red a onCreate
y terminan sucediendo 3 veces en este caso.
Claro, podemos agregar lógica para buscar llamadas duplicadas pero, en mi opinión, sería mejor, arquitectónicamente intentar y dividir la UI de la lógica comercial.
Mi recomendación sería usar 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 regresan, se publican en un bus como Otto, donde se ha registrado la actividad (registrarse para el evento onResume()
y onPause()
registro en onPause()
) o asegurarse de que la interfaz de devolución de llamada implementada por la actividad 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 capa UI.
MVP es el último arquitecto que la mayoría de la gente está siguiendo. Aquí está la pequeña documentación. Como la limpia arquitectura del Tío Bob dice: "La arquitectura es sobre el propósito, no sobre los marcos".
Mira este video , es una idea genial.