- Create one `AbstractValidator<T>` per request/DTO — use `RuleFor(x => x.Property)` chains for validation logic.
- Use `.WithMessage()` for user-facing error messages — include the property name and expected format in the message.
- Register validators with `AddFluentValidation()` in DI and use the ASP.NET Core integration for automatic request validation.
- Chain rules fluently: `RuleFor(x => x.Email).NotEmpty().EmailAddress().MaximumLength(255)`.
- Use `.WithMessage()` for user-friendly error messages. Use `{PropertyName}` placeholder for dynamic names.
- Use `.When()` / `.Unless()` for conditional validation rules.
- Integrate with MediatR pipeline or ASP.NET validation filter for automatic validation.