If you want to validate when the property is set, you need to use non-auto properties (i.e., manually defined get
and set
methods).
But another way to validate is to have the validation logic separate from the domain object.
class Customer {
public string FirstName { get; set; }
public string LastName { get; set; }
public string Organization { get; set; }
}
interface IValidator<T> {
bool Validate(T t);
}
class CustomerValidator : IValidator<Customer> {
public bool Validate(Customer t) {
// validation logic
}
}
Then, you could say:
Customer customer = // populate customer
var validator = new CustomerValidator();
if(!validator.Validate(customer)) {
// head splode
}
This is the approach I prefer:
- A
Customer
should not responsible for validating its own data, that is another responsibility and therefore should live elsewhere.
- Different situations call for different validation logic for the same domain object.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…