Skip to content

Latest commit

 

History

History
158 lines (130 loc) · 5.6 KB

File metadata and controls

158 lines (130 loc) · 5.6 KB

Modelo DDD - Módulo Release

Navegación Bilingüe: English · Español (este documento) Fase Requerida: Fase 5 — Entrega (Release) Audiencia Principal: DevOps, Release Managers, SRE, Arquitectos

1. Lenguaje Ubicuo (Ubiquitous Language)

Términos estrictos compartidos entre el negocio y el área técnica dentro de este contexto:

  • Release Package (Paquete de Release): Agrupa un conjunto de Technical Stories e Historias de Usuario (modo generate) o checkpoints de iniciativa validados (modo initiative-only) que han sido validadas por QA y están listas para su paso a Producción.
  • Environment (Entorno): La instancia física o lógica (ej. Staging, UAT, Producción) donde el código opera.
  • Deployment Record (Registro de Despliegue): Traza inmutable de una actividad de despliegue físico hacia un Entorno.
  • Release Notes: Artefacto oficial para la comunicación ejecutiva del valor desplegado.

2. Mapas Conceptuales y Agregados (Mermaid)

2.0. Leyendas y Glosario Visual

Símbolo/Estereotipo Significado
<<Aggregate Root>> Entidad raíz transaccional. Gobierna la persistencia de sus entidades internas.
<<Value Object>> Objeto inmutable sin identidad propia. Representa una propiedad estructural.
*-- (Línea sólida) Composición. El elemento hijo no puede existir sin el padre.
..> (Línea punteada) Dependencia. El elemento depende de interactúa con el otro componente para delegar acciones.

2.1. Vista 1: Core de Negocio (Agregados y Entidades)

classDiagram
    class ReleasePackage {
        <<Aggregate Root>>
        +UUID id
        +String tenantId
        +String versionNumber
        +String releaseNotes
        +ReleaseStatus status
        +UUID releaseManagerId_umsUserId
        +List~UUID~ validatedStoryIds
        +List~UUID~ validatedCheckpointIds?
        +List~ExternalReference~ externalRefs
        +generateReleaseNotes(UUID umsUserId)
        +approveDeployment(ReleaseGate, UUID umsUserId)
        +markAsDeployed(UUID umsUserId)
    }
    note for ReleasePackage "En modo generate, validatedStoryIds se llena con IDs de historias validadas. En modo initiative-only, validatedCheckpointIds se llena con IDs de checkpoints validados."

    class DeploymentRecord {
        <<Aggregate Root>>
        +UUID id
        +UUID releasePackageId
        +UUID environmentId
        +UUID deployedById_umsUserId
        +Date deploymentDate
        +DeploymentStatus status
        +String rollbackUrl
        +List~ExternalReference~ externalRefs
        +logDeployment(DeploymentStatus status, UUID umsUserId)
        +triggerRollback(UUID umsUserId)
    }

    class Environment {
        <<Entity>>
        +UUID id
        +String name
        +EnvironmentType type
    }

    class ExternalReference {
        <<Value Object>>
        +ExternalSystem system
        +String externalId
        +String url
        +ReferenceType type
        +String label
        +Date linkedAt
        +Map metadata
    }

    ReleasePackage "1" --> "0..*" DeploymentRecord : origina
    ReleasePackage "1" *-- "1..*" Environment : define targets
    ReleasePackage "1" *-- "0..*" ExternalReference : mapeado a
    DeploymentRecord "1" *-- "0..*" ExternalReference : mapeado a
Loading

2.2. Vista 2: Componentes de Workflow y Auditoría

classDiagram
    class AuditControl {
        <<Value Object>>
        +String createdBy
        +Date createdAt
    }

    class ReleaseGate {
        <<Value Object>>
        +String approvedById_umsUserId
        +GateDecision decision
        +Date decidedAt
    }

    class StateTransition {
        <<Value Object>>
        +ReleaseStatus fromState
        +ReleaseStatus toState
        +Date transitionDate
    }

    class ReleasePackage {
        <<Aggregate Root>>
    }

    ReleasePackage "1" *-- "1" AuditControl : auditada por
    ReleasePackage "1" *-- "0..1" ReleaseGate : gobernada por
    ReleasePackage "1" *-- "0..*" StateTransition : historial de estados
Loading

2.3. Vista 3: Infraestructura Transversal (Shells)

classDiagram
    class IntegrationFabric {
        <<Shared Kernel Shell>>
        +triggerCDPipeline()
        +listenToWebhook()
    }

    class TenantConfigShell {
        <<Shared Kernel Shell>>
        +getReleasePolicies()
    }

    class UMS_SDK {
        <<Cross-Cutting>>
        +RequiresDomainAccess()
    }

    class ReleasePackage {
        <<Aggregate Root>>
    }

    class DeploymentRecord {
        <<Aggregate Root>>
    }

    ReleasePackage ..> TenantConfigShell : lee políticas
    ReleasePackage ..> UMS_SDK : asegurada vía
    DeploymentRecord ..> IntegrationFabric : hidratada asíncronamente por (ej. Jenkins/Harness)
Loading

3. Diseño Táctico

3.1. Aggregate Roots Independientes (Anti-Bloqueos)

  • DeploymentRecord: Elevado a Aggregate Root para que las plataformas de CI/CD (GitHub Actions, Jenkins, Harness) puedan actualizar el estado del despliegue (SUCCESS/FAILED) asíncronamente sin bloquear el ReleasePackage maestro.
  • Gestión de Toggles: Por definición corporativa, Evolith Tracker se enfoca en el gobierno del SDLC. Los "Feature Toggles" (interruptores de funcionalidad) se han considerado una preocupación externa puramente operativa, por lo que no se modelan dentro del Tracker.

3.2. Mapeo Seguro UMS y Mapeo ALM

Los orquestadores del release (releaseManagerId_umsUserId, deployedById_umsUserId) están estrictamente tipados. Esto permite un trazado seguro y autorizaciones granulares para approveDeployment(). Las herramientas CI/CD se conectan mediante los ExternalReference.