Command Argument Validation with FluentValidation
SlashCommands MUST use FluentValidation for argument validation via Spectre.Console.CLI's validation pattern.
DO:
- •Create validator classes alongside settings classes (e.g.,
StoryCommandSettingsValidator) - •Inherit validators from
AbstractValidator<TSettings> - •Define validation rules in the validator constructor
- •Override
Validate()in settings class to instantiate validator and returnValidationResult - •Map FluentValidation errors to
ValidationResult.Error(message)
DON'T:
- •Perform validation in
ExecuteAsyncmethod with manual conditionals - •Use DataAnnotations attributes for complex cross-property validation
- •Build custom validation frameworks
Example Pattern:
csharp
public override ValidationResult Validate()
{
var validator = new StoryCommandSettingsValidator();
var result = validator.Validate(this);
return result.IsValid
? ValidationResult.Success()
: ValidationResult.Error(result.Errors.First().ErrorMessage);
}
Rationale: Consistent validation improves maintainability; FluentValidation provides expressive, readable rules for complex scenarios like mutually exclusive flags.