¿Cómo se crea la arquitectura de su aplicación de Android?

Las aplicaciones de Android son fáciles de desarrollar pero muy propensas al código de espagueti, compuesto por un montón de fragmentos de código pegados. Sin embargo, si se siguen algunas reglas, le permite desarrollar una base de código elegante para sus aplicaciones de Android según mi experiencia como desarrollador de Android y los errores que encontré al hacer revisiones de código. Aquí hay algunas maneras de diseñar buenas aplicaciones que resistirán la prueba del tiempo y evitarán dolores de cabeza de mantenimiento en el futuro:

  1. MVC : asegúrese de tener el código dividido en modelos, vistas y controladores. Esta es una de las reglas básicas que puede / debe seguir para cualquier base de código orientada a objetos (el código de la aplicación de Android es principalmente Java, se aplica muy bien aquí). Para Android, considere aproximadamente la clase de actividad y XML como la vista, una clase separada para hablar con el backend y dar y tomar de la interfaz de usuario como controlador y una clase de modelo que representa objetos como estudiantes, maestros, humanos, animales.
  2. Duplicar tablas de base de datos a clases de modelo : si tiene una tabla de usuario , asegúrese de tener una clase de usuario que tenga exactamente las mismas variables de instancia que las columnas de la base de datos. Esto le permite representar cada fila en una base de datos como un objeto singular de usuario de clase. Esto es muy útil para el procesamiento de datos y el almacenamiento de resultados de consultas seleccionadas.
  3. Clases internas y métodos onClick () : muchas veces los desarrolladores terminan escribiendo cientos de líneas de métodos onClick () que se escriben dentro de clases internas anónimas. Por favor, evite eso para una mejor legibilidad. Refactorice el código dentro de los métodos onClick () en métodos más pequeños y llámelos dentro del método onClick () .
  4. Evite demasiados OnClickListeners : si su clase de actividad tiene muchos botones y sus correspondientes onClickListeners , refactorícelos en clases personalizadas fuera de la clase de actividad para una mejor legibilidad. Sin embargo, al hacer esto, podemos perder el control de acceso proporcionado por la naturaleza misma de la clase interna. Una forma de solucionarlo parcialmente sería declarar la nueva clase OnClickListener como protegida y mantenerla en el mismo paquete donde reside la clase de actividad. Esto evita que cualquier otra clase fuera del paquete de la actividad acceda a OnClickListeners
  5. Modo sin conexión : permita a los usuarios acceder a todas las funciones de la aplicación en la medida de lo posible sin conexión a Internet almacenando temporalmente su información dentro de la aplicación y luego sincronizándola con el backend de la nube una vez que esté conectado a Internet. Esto ayuda a que las aplicaciones tengan éxito en regiones donde la conectividad de la red es mala.
  6. No almacene PII localmente : no almacene información de identificación personal dentro de una aplicación de Android localmente.
  7. Use SSL : para conectarse con su proveedor de la nube utilizando la API REST o por otros medios, use siempre una conexión HTTP segura.
  8. No codifique los nombres de los elementos de la IU : utilice siempre strings.xml para almacenar todos los nombres de los elementos de la IU. Facilita el cambio de nombre en el futuro.
  9. Múltiples recursos para tamaños de pantalla : intente utilizar múltiples recursos para diferentes tamaños de pantalla. También intente crear diferentes diseños para la orientación vertical y horizontal. Consulte las pautas de Android para admitir pantallas múltiples: Soporte de pantallas múltiples
  10. Utilice UUID para identificar usuarios de forma exclusiva : no utilice IMEI, IMSI para identificar de forma exclusiva a sus usuarios. Este blog le ayudará a comprender por qué y cómo usar UUID: identificación de instalaciones de aplicaciones

Espero que esto ayude a otros desarrolladores nuevos y existentes. ¡Buena suerte!

Entonces esto sucedió cuando estaba trabajando en Mindtickle como desarrollador de Android. Así que anteriormente trabajé tanto en el front-end (angular js) como en el back-end (play) y estaba muy al tanto de las tecnologías que deben usarse para aumentar la productividad del desarrollador, es decir, escribir menos código. Así que desarrollé una aplicación con el antiguo marco de Android en el que verificamos manualmente la conexión a Internet, escribimos manualmente constructores de consultas sql, cargadores de contenido adicionales que era poco difícil de codificar. Luego, poco después, se me asignó otra parte de la aplicación que debe construirse. Y sé que si escribí el código con la arquitectura anterior, no va a escalar y tampoco quiero continuar con la arquitectura antigua. Me llevó una semana y un mes leer continuamente sobre las mejores prácticas y el diseño en Android. Si me topé con mejores ideas relacionadas con la arquitectura y el diseño mientras navegaba, nunca dudé en reemplazar el trabajo en curso con la mejor solución. Esto continúa durante un mes y finalmente diseñé toda mi aplicación con la arquitectura a continuación.

Estas son las 7 tecnologías que utilicé que constituyen toda la arquitectura.

1. Daga ( https://google.github.io/dagger/ )

Este es el marco de inyección de dependencias. Anteriormente solíamos crear instancias de adaptador, aplicación, preferencias compartidas en cualquier parte de nuestro código, no existe una fuente centralizada para administrar estas instancias. Esto aumenta la legibilidad del código y el acoplamiento flojo entre los objetos.

2. Retrofit y OKHTTPClient ( https://github.com/square/okhttp …)

Con este marco, tenemos una mejor administración y controles de las llamadas api donde podemos definir múltiples interceptores y también tenemos un control para ejecutar las llamadas api sincrónicamente o asincrónicamente.

3. SqlDelight ( https://github.com/square/sqldelight )

Ahora no estamos escribiendo o creando consultas manuales, solo escribimos consultas de tabla y sql normales y este marco genera modelos java que nos ayudan a mantener nuestras declaraciones sql juntas, organizadas y de fácil acceso a java.

4. SqlBrite ( https://github.com/square/sqlbrite ) Anteriormente solíamos ver un problema o una queja de los clientes en los que los datos se actualizaban en db, pero no podemos ver ningún cambio en la interfaz de usuario si se actualiza la página. . Esto se debe a que no podemos escuchar los cambios db de manera efectiva y el mecanismo de captura de eventos con los cambios db no fue tan fluido. La base de datos SqlBrite nos ayuda a lograrlo fácilmente utilizando su modelo de Suscriptor.

5. RXAndroid ( https://github.com/ReactiveX/RxA …)

Este marco nos movió de la programación imperativa a la funcional, nos permite pensar en la lógica de programación en términos de flujos. Cualquier lógica compleja (dos llamadas de servidor y luego actualizar db) puede convertirse en flujos y puede escribirse fácilmente con este marco. reduce nuestra línea de código y cambia nuestro proceso de pensamiento.

6. Enlace de datos

( https://developer.android.com/to …)

Este es el nuevo marco que ha introducido Android, similar al enlace de datos bidireccional angular js. Esto reduce todo nuestro código de placa de caldera para configurar los datos a la vista manualmente, ya que ahora definimos el modelo y actualizamos el modelo, vemos las actualizaciones automáticamente. DataBinding también nos ayuda a definir adaptadores genéricos para todas las clases.

7. patrón MVP

( http://konmik.com/post/introduct …)

Encapsulamos toda nuestra lógica en el patrón mvp. Ahora para cada pantalla tenemos una vista y un presentador que se comunicará con el modelo de datos para obtener los datos. Esto nos ayuda a lograr un acoplamiento flexible entre las vistas y la lógica empresarial, por lo que nos ayuda a localizar y encontrar fácilmente el código correspondiente a la lógica empresarial.

Espero que esto ayude a los nuevos desarrolladores a diseñar los bloques de construcción básicos para Android :).

Generalmente sigo el MVC simple:
– Todas las operaciones intrínsecas de datos son gestionadas completamente por los Modelos.
Los modelos interactúan con las llamadas de red y la base de datos y manipulan los datos según los requisitos y estándares de la aplicación.
– Los controladores capturan las respuestas de datos del modelo y las envían a las vistas utilizando la estructura básica de devolución de llamada

Usar Abstracción es la clave para un código que se pueda mantener.
Utilice los conceptos de herencia, por ejemplo. crear BaseActivity, BaseController, BaseModel, BaseNetwork, etc.
Utilice interfaces para devoluciones de llamada y proporcione controles estrictos en el código.

Encontré que este artículo proporciona puntos interesantes: http://birbit.com/a-recipe-for-w

La arquitectura supuestamente se usa para la aplicación Path. El autor trabajó en Path y acaba de unirse al equipo de Android UI Toolkit en Google.

P / S: uso el mismo enfoque para algunas de mis aplicaciones y estoy bastante contento con el resultado. Definitivamente vale la pena intentarlo, al menos para proyectos paralelos.

A continuación se muestra la imagen que lo ayudará a comprender la arquitectura de la aplicación de Android:
Fuente: iOS, Android, Mobile App Development Company USA – Desarrollo web HTML5