Я обычно проверяю такие проблемы в самом бизнес-объекте и выкидываю исключения, в которых игнорирование приведет к объекту с недопустимым состоянием. Такие исключения включают (но не ограничиваются ими):
IllegalArgumentException
для передаваемых аргументов, которые неприемлемы (например, ноль, где не разрешено)
IllegalStateException
для случая, когда объект может быть переведен в неправильное состояние (отличается от сценария, в котором аргумент недопустим)
Таким образом, сам бизнес-объект никогда не является недействительным.
Я немедленно проверяю эти ситуации. Сценарий, которого я отчаянно пытаюсь избежать, - это изменение объекта таким образом, чтобы он находился в недопустимом состоянии, и обнаружение этого только позднее (возможно, спустя годы - представьте, что сериализовать такой объект и десериализовать его через год). Это сделало бы открытие источника таких проблем почти невозможным.
Я, конечно, хочу, чтобы эти проверки проводились как на этапе производства, так и на стадии разработки / тестирования. Обычно затраты на выполнение таких проверок незначительны по сравнению со временем, затрачиваемым на нормальную работу, и особенно по сравнению с количеством времени, которое потребуется вам, чтобы отказаться от такого сценария.