Saltar al contenido principal

Capa de dominio

La Capa de Dominio contiene toda la lógica de negocio de la aplicación. Es el núcleo del proyecto: define qué datos existen, qué operaciones son válidas y cómo se comunican las capas superiores con la fuente de datos.

El principio rector de la capa es la independencia de cualquier detalle técnico: las clases de dominio no importan librerías de infraestructura, frameworks de UI ni SDKs externos. Todo lo que vive aquí es Dart puro.

Componentes​

ComponenteResponsabilidad
EntidadesEstructuras de datos inmutables que representan los conceptos del negocio. Extienden Equatable y pueden incluir métodos de transformación semánticos.
EnumeradoresConjuntos cerrados de valores tipados del dominio. Incluyen un caso unknown como fallback y getters booleanos para facilitar condicionales.
ParámetrosObjetos de entrada para casos de uso y repositorios. La capa de datos extiende estas clases para agregar serialización.
RepositoriosInterfaces que abstraen el acceso a datos. La capa de datos proporciona las implementaciones concretas.
Casos de usoOrquestadores de la lógica de negocio. Coordinan entidades, repositorios y reglas del dominio.
ValidadoresReglas de validación de campos consideradas parte de la lógica de negocio (e.g., formato de email, longitud de contraseña).

Estructura de carpetas​

domain/
├── entities/
│ ├── enums/
│ │ ├── order_status.dart
│ │ ├── user_role.dart
│ │ └── enums.dart # Barrel file
│ ├── params/
│ │ ├── create_product_params.dart
│ │ ├── update_user_params.dart
│ │ └── params.dart # Barrel file
│ ├── product.dart
│ ├── user.dart
│ └── entities.dart # Barrel file raíz
├── repositories/
│ ├── i_product_repository.dart
│ ├── i_user_repository.dart
│ └── repositories.dart # Barrel file
├── use_cases/
│ ├── product/
│ │ ├── create_product.dart
│ │ └── get_products.dart
│ └── user/
│ └── get_user.dart
└── validators/
├── email_validator.dart
└── validators.dart # Barrel file
nota

Cada subcarpeta debe tener su propio barrel file que exporte todos sus elementos. El barrel file raíz de la capa (domain.dart) debe re-exportar los barrel files de cada subcarpeta.