It bothers be a little bit that an external `validate` function depends on a "private" method of the model. Maybe we could expose `_fields` as a part of a models interface? It is tricky though because we don't want to reserve too many names. Maybe we should pass fields as a parameter?