ums

FeatureFlag — Arquitectura de Agregado

Contexto Delimitado: Configuración
Raíz de Agregado: FeatureFlag
Módulo: Ums.Domain.Configuration.FeatureFlag
Estado: Producción


1. Visión General del Agregado

Propósito

El agregado FeatureFlag controla la habilitación de funcionalidades en runtime de una forma simplificada pero operativamente útil. Almacena un código técnico de bandera, tipo de bandera, definición de targets, targeting opcional por recurso enlazado, porcentaje de rollout y transiciones de estado entre inactive, active y archived.

Responsabilidad de Negocio

Raíz de Agregado

FeatureFlag es la raíz del agregado. Las transiciones de estado y el comportamiento de evaluación se coordinan a través del agregado.

Invariantes y Reglas de Consistencia

  1. Las banderas por porcentaje requieren RolloutPercentage entre 0 y 100.
  2. Las banderas archivadas no pueden volver a activarse ni desactivarse.
  3. Activar una bandera ya activa es inválido.
  4. Desactivar una bandera ya inactiva es inválido.
  5. Las nuevas banderas nacen en Inactive.

Entidades Relacionadas / Objetos de Valor

| Entidad / VO | Tipo | Propiedad | |—|—|—| | FeatureFlagId | Objeto de Valor | Identificador del agregado | | FlagType | Enumeración | Categoría actual del rollout | | FlagStatus | Enumeración | Inactive, Active, Archived | | LinkedResourceType | Enumeración | Targeting contextual opcional | | FlagEvaluationLog | Entidad | Historial de evaluación perteneciente al agregado |

Eventos de Dominio

| Evento | Disparador | |—|—| | FeatureFlagCreatedEvent | Nueva bandera creada | | FeatureFlagActivatedEvent | Bandera activada | | FeatureFlagDeactivatedEvent | Bandera desactivada | | FeatureFlagArchivedEvent | Bandera archivada | | FeatureFlagStateChangedEvent | Transición de estado emitida | | FlagEvaluatedEvent | Evaluación ejecutada en runtime |


2. Modelo de Dominio

FeatureFlag (Raíz de Agregado)
├── Props: FeatureFlagProps
│   ├── Id: IdValueObject
│   ├── FlagCode: string
│   ├── FlagType: FlagType
│   ├── FlagTargets: string
│   ├── Status: FlagStatus
│   ├── LinkedResourceType?: LinkedResourceType
│   ├── LinkedResourceId?: IdValueObject
│   ├── RolloutPercentage?: int
│   └── Audit: AuditValueObject
└── Hijos
    └── IReadOnlyCollection<FlagEvaluationLog>

3. Diagramas del Modelo de Objetos

classDiagram
    class FeatureFlag {
        +Guid Id
        +string FlagCode
        +FlagType FlagType
        +string FlagTargets
        +FlagStatus Status
        +LinkedResourceType LinkedResourceType
        +Guid LinkedResourceId
        +int RolloutPercentage
        +List~FlagEvaluationLog~ EvaluationLog
        +Create(flagCode, flagType, flagTargets, linkedResourceType, linkedResourceId, rolloutPercentage, actor)
        +Activate(actor)
        +Deactivate(actor)
        +Archive(actor)
        +Evaluate(evaluatedBy, context)
    }

4. Diagramas de Secuencia

Flujo de Evaluación

sequenceDiagram
    participant C as Caller
    participant F as FeatureFlag (AR)

    C->>F: Evaluate(evaluatedBy, context)
    F->>F: Validar que no esté archivada
    F->>F: Resolver resultado desde el estado actual
    F->>F: Agregar FlagEvaluationLog
    F->>F: Levantar FlagEvaluatedEvent

5. Modelo ER

erDiagram
    FEATURE_FLAG ||--o{ FLAG_EVALUATION_LOG : "registra"

    FEATURE_FLAG {
        uniqueidentifier Id PK
        nvarchar FlagCode
        int FlagTypeId
        nvarchar FlagTargets
        int StatusId
        int LinkedResourceTypeId
        uniqueidentifier LinkedResourceId
        int RolloutPercentage
        nvarchar CreatedBy
        datetime2 CreatedAtUtc
        nvarchar UpdatedBy
        datetime2 UpdatedAtUtc
        nvarchar AuditTimeSpan
    }

Reglas de Aislamiento por Tenant


6. Integración entre Contextos Delimitados


7. Capa de Aplicación


8. Infraestructura / Persistencia


9. Seguridad y Cumplimiento


10. Decisiones Técnicas


Volver al Índice de Configuración