Я всегда был сторонником самодельных решений. Таким образом, вы можете сделать это также по-старому: проверять перед сохранением непосредственно в коде (возможно, для проверки чистоты можно отделить валидацию от собственной функции). Честно говоря, я никогда не понимал, почему этот метод так недоволен, и почему нам нужно было изобрести методы проверки. У этого есть одно большое преимущество: вся проверка в одном месте; Вам не нужно охотиться вокруг. Кроме того, в некоторых случаях логика проверки может стать настолько сложной, что это единственный разумный способ.