Я часто вижу термин Инварианты в DDD. Здесь Дино Эспозито говорит об этом. Если я посмотрю на библиотеку .NET, я вижу класс ValidationAttribute. Являются ли Инварианты и правилами проверки одинаковыми? Например, могу ли я сказать, что скидка 50% доступна только в том случае, если общая сумма заказа более 250 долларов является инвариантной?
Или они отличаются от того, где Инварианты должны защитить объект от недействительности, а проверка заключается в проверке действительности объекта даже после того, как он изменил его состояние (он может находиться в допустимом или недействительном состоянии)? В приведенном выше примере, если я использую инварианты, я проверяю инвариант перед обновлением скидки, а в случае проверки я применяю 50% скидку, а затем проверяю на достоверность (объект уже находится в недопустимом состоянии).