Files
roi-theme/shared/Application/README.md
FrankZamora 677fbd4368 Fase-00: Estructura Clean Architecture Context-First creada
- 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.
2025-11-18 23:36:06 -06:00

3.8 KiB

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)

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;
}
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:

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:

// 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