Please see the code below:public class Customer{    public int _iD { get; set; }    public decimal _salary { get; set; }    public List<String>_assignedOffers { get; set;  }    private AbstractValidator<Customer> _validator;    private IRulesOfferCalculator _rulesOfferCalculator;    public Customer(AbstractValidator<Customer> validator, IRulesOfferCalculator rulesOfferCalculator)    {        _validator = validator;        _rulesOfferCalculator = rulesOfferCalculator;    }    public void AssignOffers()    {        ValidationResult results = _validator.Validate(this);        if (results.IsValid)        {            _assignedOffers = _rulesOfferCalculator.CalculateOffers(this);        }        else        {            _validator.ValidateAndThrow(this);        }    }}It is a Domain Layer class in a rich domain model.  I have used FluentValidation for the validation. The Service Layer (WFC) creates an instance of Customer and initialises it.The concern I have is that the class has two responsibilities:Validate the customer.  If validation fails then thrown an exception.  Validation can fail if the customer is under 21 years old etc  If validation fails then throw an exception with reason for failure in the exception string.  If validation is successful then assign offers (_assignedOffers  is an instance variable)I have two questions:Is it bad practice to throw an exception if validation fails? Is there a better way to notify the user if validation fails?  Does this class have too many responsibilities i.e. validate and assign offers.  Alternatively the Service Layer could call: Validate and then call AssignOffers if Validate is successful.  However, I believe this would make the domain model anemic.Please be aware that I am building a rich domain model.
Class that calls initiates the validation of itself and then initiates the assignment of offers
c#;ddd