Patrón de arquitectura limpio de Android
He leído varios documentos sobre la arquitectura limpia en general y específicos de Android también.
Me gusta totalmente la idea de crear un módulo independiente para cada nueva característica, pero mi preocupación es ¿cómo organizar los objetos de la capa de datos? Como quiero que sean reutilizables.
¿Debería la capa de datos ser un módulo aparte junto a todos los módulos de características o la capa de datos debería dividirse en componentes como módulos? p.ej. Módulo separado para la red, etc base de datos?
Echa un vistazo a este proyecto para un marco de arquitectura limpia para Android. https://github.com/Karumi/Rosie . Sin embargo, para responder a su pregunta, personalmente separo los componentes de red de cada módulo y los inyecto en los módulos de características apropiados que los necesitan. Por ejemplo, imagino que estoy creando algún tipo de cliente de Twitter – podría tener una clase FeedManager, que expone métodos para buscar el feed, y TweetManager, que expone métodos para crear un nuevo tweet. Sin embargo, es un poco excesivo para este ejemplo, ya que FeedManager y TweetManager pueden ser muy pequeños.
Tenga cuidado con la arquitectura excesiva demasiado pronto. Tener un módulo de red único que tenga métodos para cada solicitud de red en la aplicación es un olor a código y se vuelve difícil de mantener a medida que crece la aplicación. Pero, si su aplicación es pequeña, tener múltiples clases de red que cada uno haga una pequeña cosa también podría ser excesivo, y probablemente se beneficiaría de tener sólo un módulo de red único.
También – no se siente como usted tiene que ir cerdo entero en la arquitectura limpia – está bien para combinar múltiples capas en una sola capa si se adapta a su aplicación. Cometí este error al intentar implementar VIPER (un derivado de arquitectura limpia) 'por el libro', y terminé teniendo varias clases extra para cada característica que básicamente no hacía nada sino pasar los datos a la siguiente capa, y se convirtió en una molestia enorme mantener. Arquitectura limpia puede ser una bendición para un gran proyecto complejo en el que la separación de las preocupaciones al extremo es necesario, pero para la mayoría de las aplicaciones de Android que he visto, mucho más simple MVC, MVVM o MVP será lo suficientemente bueno.
La primera cosa que me gustaría corregir que su arquitectura de paquete debe basarse en la característica no la arquitectura del módulo como usted ha mencionado. En segundo lugar, para acomodar todas las cosas relacionadas con la base de datos, sólo crear un pakcage dedicado para el mismo.
Aquí está la captura de pantalla de uno de los proyectos. Puede que te ayude.
Ref y más detalle
No hay arquitectura, ni limpio ni gobernar a todos. No hay una manera correcta de hacer las cosas.
Mi mejor consejo es utilizar estas diferentes ideas en sus propios proyectos y continuamente iterar y mejorar en ellos hasta que tenga una buena base que funciona para usted. Trate de poner en práctica algo, luego dar un paso atrás y revisar su trabajo, ver lo que funciona y lo que podría ser mejor.
Podría darte un montón de enlaces, pero parece que ya habrás leído la mayoría de ellos. ¡No puedes aprender a andar en bicicleta leyendo, obteniendo codificación y escribiendo sobre tus descubrimientos!