- Creada estructura shared/ con Domain, Application, Infrastructure - Documentación completa de arquitectura (5 READMEs, ~6150 líneas) - Archivos .gitkeep para preservar estructura en Git - Contextos admin/ y public/ documentados Estructura shared/: - Domain/ (ValueObjects, Exceptions, Contracts) - Application/ (Contracts, Services) - Infrastructure/ (Services, Traits) Documentación incluye: - Principios de Clean Architecture - Reglas de dependencia - Ejemplos de código - Guías de testing - Mejores prácticas Preparación completa para implementación en Fase-1.
139 lines
3.8 KiB
Markdown
139 lines
3.8 KiB
Markdown
# Capa de Aplicación - Shared (Casos de Uso Compartidos)
|
|
|
|
## Propósito
|
|
|
|
La capa de Aplicación de `shared/` contiene **casos de uso y servicios compartidos** que orquestan la lógica
|
|
de dominio. Esta capa coordina el flujo de datos entre el dominio y la infraestructura.
|
|
|
|
## Principios
|
|
|
|
1. **Orquestación**: Coordina objetos de dominio para realizar casos de uso
|
|
2. **Sin lógica de negocio**: Delega la lógica al dominio
|
|
3. **Independiente de frameworks**: No depende de WordPress directamente
|
|
4. **Contratos claros**: Define interfaces para servicios
|
|
|
|
## Estructura
|
|
|
|
```
|
|
shared/Application/
|
|
├── Contracts/ # Interfaces de servicios (CacheServiceInterface, etc.)
|
|
└── Services/ # Implementaciones de servicios compartidos
|
|
```
|
|
|
|
## Ejemplos de Uso
|
|
|
|
### Contracts (Interfaces de Servicios)
|
|
|
|
```php
|
|
namespace ROITheme\Shared\Application\Contracts;
|
|
|
|
interface CacheServiceInterface
|
|
{
|
|
public function get(string $key): mixed;
|
|
public function set(string $key, mixed $value, int $ttl = 3600): bool;
|
|
public function delete(string $key): bool;
|
|
public function flush(): bool;
|
|
}
|
|
```
|
|
|
|
```php
|
|
namespace ROITheme\Shared\Application\Contracts;
|
|
|
|
interface ValidationServiceInterface
|
|
{
|
|
public function validate(array $data, array $rules): array;
|
|
public function fails(): bool;
|
|
public function errors(): array;
|
|
}
|
|
```
|
|
|
|
### Services (Implementaciones Abstractas)
|
|
|
|
Servicios que pueden tener múltiples implementaciones:
|
|
|
|
```php
|
|
namespace ROITheme\Shared\Application\Services;
|
|
|
|
use ROITheme\Shared\Application\Contracts\ValidationServiceInterface;
|
|
|
|
abstract class BaseValidationService implements ValidationServiceInterface
|
|
{
|
|
protected array $errors = [];
|
|
|
|
public function fails(): bool
|
|
{
|
|
return !empty($this->errors);
|
|
}
|
|
|
|
public function errors(): array
|
|
{
|
|
return $this->errors;
|
|
}
|
|
|
|
abstract public function validate(array $data, array $rules): array;
|
|
}
|
|
```
|
|
|
|
## Relación con Infrastructure
|
|
|
|
La capa de Application **define contratos** (interfaces), pero **no implementa** la lógica específica
|
|
de frameworks. Las implementaciones concretas van en `shared/Infrastructure/`:
|
|
|
|
```
|
|
shared/Application/Contracts/CacheServiceInterface.php (interface)
|
|
↓
|
|
shared/Infrastructure/Services/WordPressCacheService.php (implementación)
|
|
```
|
|
|
|
## Reglas de Dependencia
|
|
|
|
✅ **PUEDE** depender de:
|
|
- `shared/Domain/` (Value Objects, Entities, Exceptions)
|
|
- Interfaces dentro de `shared/Application/Contracts/`
|
|
|
|
❌ **NO PUEDE** depender de:
|
|
- `shared/Infrastructure/` (implementaciones concretas)
|
|
- `admin/` o `public/`
|
|
- WordPress functions directamente
|
|
- Detalles de implementación
|
|
|
|
## Testing
|
|
|
|
Los servicios de esta capa se testean con **tests unitarios usando mocks**:
|
|
|
|
```php
|
|
// tests/Unit/Shared/Application/Services/SomeServiceTest.php
|
|
public function test_validates_data_correctly()
|
|
{
|
|
$validator = $this->createMock(ValidationServiceInterface::class);
|
|
$validator->method('validate')->willReturn(['name' => 'Test']);
|
|
|
|
$service = new SomeService($validator);
|
|
$result = $service->process(['name' => 'Test']);
|
|
|
|
$this->assertTrue($result);
|
|
}
|
|
```
|
|
|
|
## Cuándo Agregar Código Aquí
|
|
|
|
Agrega código a `shared/Application/` cuando:
|
|
- Defines un contrato para un servicio compartido
|
|
- Necesitas orquestar múltiples objetos de dominio
|
|
- El servicio será usado por admin/ y public/
|
|
- Necesitas abstraer implementaciones de infraestructura
|
|
|
|
No agregues aquí:
|
|
- Lógica de negocio (va en Domain/)
|
|
- Implementaciones concretas de WordPress (van en Infrastructure/)
|
|
- Lógica específica de un solo contexto
|
|
- Código acoplado a frameworks
|
|
|
|
## Ejemplos de Servicios Comunes
|
|
|
|
- `ValidationServiceInterface`: Validación de datos
|
|
- `CacheServiceInterface`: Manejo de caché
|
|
- `SerializerServiceInterface`: Serialización de datos
|
|
- `LoggerServiceInterface`: Logging
|
|
- `EventDispatcherInterface`: Eventos del sistema
|