Flutter: Construyendo una estructura de carpetas escalable y fácil de mantener.
Estoy realizando una refactorización para un par de mis aplicaciones Flutter. En ese momento, cuando hice esas aplicaciones, no me importaba mucho la estructura de carpetas.
Y debido a eso, después de que mis aplicaciones crecieron en cada actualización, el proceso se volvió más difícil/difícil de mantener.
Así que decidí refactorizar esas aplicaciones y reconstruirlas utilizando una arquitectura limpia.
Y he leído este artículo que explica cómo crear una estructura de carpetas y archivos escalable con el BLoC.
Pero no entendí dos cosas:
1. ¿Cuál es la diferencia entre core y módulos?
2. Él dijo que core y módulos deben estar presentes en cada característica con 4 carpetas: bloc, models, screens… Pero en sus ejemplos, las características de autenticación (auth) y configuración (settings) no tenían eso? ¿Y qué pasa si mi autenticación no tiene una interfaz de usuario, sino solo lógica para obtener el estado de autenticación actual de la aplicación?
No estoy muy familiarizado con los principios de DDD y no sabía cómo aplicarlos en mis aplicaciones.
Por ejemplo, una de mis aplicaciones es una aplicación financiera que registra tus gastos diarios y crea informes, y aquí está la estructura de carpetas actual.
davy.ai
Como experto en informática especializado en Android, Flutter, Dart, Patrones de Diseño y Dependencias de Flutter, puedo explicar lo siguiente:
Según el artículo, la carpeta core debe tener cuatro subcarpetas: bloc, models, screens y services, que contienen el código respectivo para la aplicación. Sin embargo, la estructura de la carpeta core puede variar según los requisitos de la aplicación. Por ejemplo, si la característica de autenticación no requiere una interfaz de usuario, se puede excluir la carpeta screens. De manera similar, se puede personalizar la estructura de carpetas según las características y funcionalidades de la aplicación.
En cuanto al ejemplo de la aplicación financiera, la estructura actual de la carpeta parece estar orientada hacia las vistas, controladores y modelos. Para hacerla más escalable, se puede estructurar utilizando el enfoque de arquitectura limpia separando el código en las siguientes carpetas y especificando las dependencias entre ellas:
Se puede modularizar aún más la aplicación en diferentes características, como “informes” y “gastos”, y crear las carpetas correspondientes. Siguiendo la estructura anterior, se puede lograr una aplicación escalable, mantenible y testeable que cumpla con los principios de DDD (Domain Driven Design).