Optimized the DDD by putting the domain logic in extension methods

the domain model will not be eagerly-loaded if we just need to validate
first from the repository/IQueryable the values needed to be assigned to
model