Contexto Delimitado: Configuración
Raíz de Agregado: FeatureFlag
Módulo: Ums.Domain.Configuration.FeatureFlag
Estado: Producción
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.
FeatureFlag es la raíz del agregado. Las transiciones de estado y el comportamiento de evaluación se coordinan a través del agregado.
RolloutPercentage entre 0 y 100.Inactive.| 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 |
| 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 |
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>
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)
}
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
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
}
TenantId directamente en el agregado.LinkedResourceType y LinkedResourceId.