Since you're doing it with CQRS in mind, I think your classes should look more like
Command class: encapsulates the command parameters
class Administer { public Administer(string foo, int bar) { .... } public string Foo {get; private set;} public int Bar {get; private set;} } Command Handler: pass the command to the specialized types, don't do any validation here
class HandleAdminister { private readonly Administration _administration; public HandleAdminister(Administration administration) { _administration = administration; } public void Handle(Administer command) { administration.Administer(command.Foo, command.Bar); } } Command Validator: validation is a separate concern, we create a type to handle validation only
class ValidateAdminister { private readonly IReadEntities _readEntities; public ValidateAdminister(IReadEntities readEntities) { _readEntities = readEntities; } public bool Validate(Administer command) { ... heavy or light validation here var unadministered = _readEntities .Query<Prescription>() .Any(c=>c.Unadministered && c.Foo == command.Foo); return !unadministered; } } Client code to execute a command:
var administration = ... var command = new Administer("foo", 19); var handler = new HandleAdminister(administration); var validator = new ValidateAdminister(...); if (validator.Validate(command)) handler.Handle(command); A possible relation between a ViewModel and validators
class PatientViewModel { public bool CanAdminister {get; set;} public bool CanPrepare {get; set;} public Patient Patient {get; set;} } var model = new PatientViewModel(); model.Patient = ...; model.CanAdminister = administerCommandValidator.Validate(administerCommand); model.CanPrepare = prepareCommnadValidator.Validate(prepareCommand); The point is you can use the validator to validate the command before executing it and also to build a model for the UI.