Add an abstract for better tracking of validation errors.

Fix glitch where validation is broken after deserializing.
Added `areFieldsValid` for checking multiple fields at once
Validation function go after null checks

(so your validations only run if it's not null, no runtime `invalid field access` errors)