title: How to separate data validation from my simple domain objects (POCOs)?
body: <p>This question is language agnostic but I am a C# guy so I use the term POCO to mean an object that only preforms data storage, usually using getter and setter fields.</p>
  
  <p>I just reworked my Domain Model to be super-duper POCO and am left with a couple of concerns regarding how to ensure that the property values make sense witin the domain.  </p>
  
  <p>For example, the EndDate of a Service should not exceed the EndDate of the Contract that Service is under.  However, it seems like a violation of SOLID to put the check into the Service.EndDate setter, not to mention that as the number of validations that need to be done grows my POCO classes will become cluttered.</p>
  
  <p>I have some solutions (will post in answers), but they have their disadvantages and am wondering what are some favorite approaches to solving this dilemma?</p>