Абасс... обсудите рахитекурту
Теперь последний штрих - справа мой вариант без перезаписанного свойства, но с отдельными методами для каждого свойства. Слева ваш - без перезаписываемого свойства, но с одним методом для всех свойств.
Думаю, тут зависит от вкуса или задачи - валидировать все свойства при любом изменении любого свойства, или валидировать лишь зависимые свойства, как в моём варианте. Если свойств много, то ваш метод Validate превращается в лапшу, а мои отдельные методы всё ещё сохранают читаемость.
Но если нужен признак валидности всего объекта, то у вас достаточно вызвать один метод, а мне - завести специальный метод на весь объект, где вызвать пачку моих отдельных методов. Или завести дополнительные поля типа bool isValidMaxValue для каждого свойства, в каждом отдельном валидирующем методе их устанавливать, а в общем валидирующем методе для всего объекта - считать их по типу bool isValidObject = isValidProp1 && isValidProp2 && isValidProp3...