Business Rules
Learn how to define, compose, and evaluate business rules including invariants, validators, policies, and derivations.
Time: 60 minutes | Level: Intermediate
What You'll Learn
- Invariants (always-true rules)
- Validators (context-dependent)
- Policies (authorization rules)
- Derivations (computed properties)
- Rule composition and reuse
- Conditional rules with
When
Topics Covered
Invariants
Define always-true rules:
new RuleSetBuilder<Customer>("Default")
.Invariant("Email.Required", c => !string.IsNullOrWhiteSpace(c.Email))
.WithMessage("Email is required")
Validators
Context-dependent validation:
.Validator("Email.Unique", async (c, ctx) =>
await IsEmailUniqueAsync(c.Email))
.WithMessage("Email already exists")
Policies
Authorization and business policies:
.Policy("CanPlaceOrder", (c, ctx) =>
c.IsActive && c.CreditLimit > 0)
.WithMessage("Customer cannot place orders")
Derivations
Computed properties:
.Derivation("FullName", c => $"{c.FirstName} {c.LastName}")
Rule Composition
Reuse and combine rules:
.Include(BaseCustomerRules.Default())
.When(c => c.IsPremium)
Prerequisites
- Completion of Domain Modeling
- Understanding of validation concepts