Ответ 1
Ограничение уникальности может быть сведено к исключению персистентности, а не рассматриваться как "недопустимое состояние". Это не недопустимое состояние, пока объект не будет сохранен. Единственность имеет смысл только в контексте настойчивости. Реально, вы можете поместить это правило в свой механизм проверки, чтобы уменьшить вероятность этой ошибки, но в любой реальной многопользовательской системе вам не может быть гарантирована уникальность, пока успешная единица работы не завершит действие сохранения.
Таким образом, вы можете захотеть этого в своем механизме проверки, но вы должны обеспечить его соблюдение в своем уровне персистентности.
Я вообще поклонник DDD как методология, но я думаю, что "не разрешать объектам попадать в недействительные состояния" может потребоваться несколько извилистых абстракций. В веб-приложении наличие отдельной "модели представления" является одним из возможных решений, как промежуточного слоя до настойчивости, но обычно я этого не делаю, пока не убежу, что это вызовет у меня меньше боли, чем более простая альтернатива.