use input validation descriptors. factor out magic & dynamic property methods into container classes.