Create Invariants
Define always-true rules that validate entity state.
Goal
Create invariant rules that must always be true for an entity to be in a valid state.
Prerequisites
- JD.Domain.Rules package installed
- Entity definitions created
Steps
1. Create Rule Set Builder
using JD.Domain.Rules;
var rules = new RuleSetBuilder<Customer>("Default")
2. Add Invariant Rules
var rules = new RuleSetBuilder<Customer>("Default")
.Invariant("Name.Required", c => !string.IsNullOrWhiteSpace(c.Name))
.WithMessage("Customer name is required")
.Invariant("Email.Format", c => c.Email.Contains("@"))
.WithMessage("Email must be valid")
.Build();
3. Evaluate Rules
using JD.Domain.Runtime;
var engine = DomainRuntime.CreateEngine(manifest);
var result = engine.Evaluate(customer, rules);
if (!result.IsValid)
{
foreach (var error in result.Errors)
{
Console.WriteLine(error.Message);
}
}
Result
Invariant rules enforce entity validity at runtime and during construction of generated domain types.
Next Steps
- Create Validators - Context-dependent rules
- Compose Rules - Combine rule sets