Здравствуйте, snaphold, Вы писали:
S>Как запретить сохранение объектов в базу если объект непровалидирован?
Идея такая:
Выделить типы объектов и их комбинации. Например есть типы Human, Machine и Kiborg наследует типы Human, Machine. Ассоциировать с каждым типом валидатор. При необходимости получать валидатор по типу объекта и валидировать сам объект.
Т.е. у вас будут валидаторы HumanValidator, MachineValidator и KiborgValidator. В языках с единственным наследованием классов KiborgValidator, может агрегировать типы HumanValidator и MachineValidator.
Хранить в базе IsValid — плохая идея, т.к. валдиность это вычисляемое свойство в зависимости от валидатора. Например изменились бизнес правила, поменялся валидатор текущие объекты в базе надо обновить до валидных, isValid в этом случае абсолютно бесполезен.
Схема усложняется если валидатор не stateless, а имеет состояние в зависимости от нескольких объектов.