Coder Social home page Coder Social logo

calorietracker's Introduction

Calories Tracker - Android App

SS2@1x.png

He finalizado el curso de Multi-module architecture android por Philipp Lackner, el cual recomiendo mucho, añadí una UI distinta pero con la esencia de la original, muchas gracias a Antonio Fernández y Carlos Muñoz que me ayudaron a comprender mejor cada tema.

Tech stack = Compose, modularization with clean architecture, Material, Navigation, Retrofit, Unittest, Test end 2 end.

Personaje por Chitta Shanmukha

Multi-Module

De las muchas ventajas de trabajar con módulos es la posibilidad de dividir la responsabilidad de las capas que no deberían poder comunicarse entre sí, por ejemplo, la capa de presentación no debería tener acceso a importaciones de la capa de Data, el tener estas restricciones nos ayuda a no generar código con prácticas que pueden dificultar el mantenimiento del mismo a futuro, pero hay más ventajas, de acuerdo a la documentación oficial de google:

¿Qué es la modularización?

La modularización es una práctica para organizar una base de código en partes con acoplamiento bajo y elementos independientes. Cada parte es un módulo. Cada módulo es independiente y tiene un propósito claro. Si divides un problema en subproblemas más pequeños y fáciles de resolver, se reduce la complejidad de diseñar y mantener un sistema grande.

Untitled

Figura 1: Representación para dividir los feactures de una aplicación.

Beneficios de la modularización

Beneficio Resumen
Capacidad de reutilización La modularización ofrece oportunidades para compartir código y compilar varias apps desde la misma base. Los módulos son componentes fundamentales. Una app debe ser una suma de sus funciones cuando estas se organizan como módulos separados. La funcionalidad que proporciona un módulo determinado puede o no estar habilitada en una app en particular. Por ejemplo, un :feature:news puede ser parte de la versión final y la app de Wear, pero no de la versión de demostración.
Control de visibilidad estricto Los módulos te permiten controlar fácilmente lo que expones a otras partes de tu base de código. Puedes marcar todo excepto la interfaz pública como internal o private para evitar que se use fuera del módulo.
Entrega personalizable https://developer.android.com/guide/playcore/feature-delivery?hl=es-419 usa las funciones avanzadas de los paquetes de aplicaciones, lo que t permite ofrecer ciertas funciones de tu app de manera condicional o a pedido.

Los beneficios anteriores solo se logran con una base de código modular. Los siguientes beneficios se pueden lograr con otras técnicas, pero la modularización puede ayudarte a aplicarlos aún más.

Beneficio Resumen
Escalabilidad En una base de código de acoplamiento alto, un solo cambio puede desencadenar una cascada de alteraciones en partes de código aparentemente no relacionadas. Un proyecto modularizado adecuadamente adoptará el principio de https://en.wikipedia.org/wiki/Separation_of_concerns y, por lo tanto, limitará el acoplamiento. De esta manera, los colaboradores tendrán mayor autonomía.
Propiedad Además de habilitar la autonomía, los módulos también se pueden usar para aplicar la responsabilidad. Un módulo puede tener un propietario dedicado que sea responsable de mantener el código, corregir errores, agregar pruebas y revisar los cambios.
Encapsulamiento El encapsulamiento significa que cada parte de tu código debería tener el menor conocimiento posible sobre otras partes. El código aislado es más fácil de leer y entender.
Capacidad de realizar pruebas La capacidad de realizar pruebas determina qué tan fácil es probar tu código. Un código que se puede probar es aquel en el que los componentes se pueden probar fácilmente de forma aislada.
Tiempo de compilación Algunas funcionalidades de Gradle, como la compilación incremental, la caché de compilación o la compilación en paralelo, pueden aprovechar la modularidad para mejorar el rendimiento de la compilación.

Fuente de información documentación oficial de Google https://developer.android.com/topic/modularization

Cada Feature contiene su capa de Data, Domain y Presentación correspondiente, uno de los problemas que me encontré fue como compartir los Modelos para la aplicación en general, la propuesta por el gran profesional Antonio Fernández, es crear un Módulo específico para los modelos en general:

Untitled

De esta manera podemos crear Data Object Transportation en la capa de data, pero que a su vez conoce nuestro módelo de UI.

Fue complicado entender la configuración de los archivos build.gradle.kts, pero que sin embargo es una excelente forma de organizar los features de una aplicación de gran tamaña.

Screens

SS1@1x.png

SS3@1x.png

SS4@1x.png

SS5@1x.png

Muchas gracias por compartir ❤️

calorietracker's People

Contributors

erix-mx avatar eric-wifigratis avatar

Stargazers

Antonio Fernández Alabarce avatar  avatar Jorge Agulló avatar Judah avatar José Ramón Blanco avatar Luis Fernando  avatar Carlos Muñoz avatar Jose Jordan avatar Juan Sanz avatar Alonso Ato Neyra avatar Antonio Fdez. Alabarce avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.