В идеальном приложении каждое бизнес-правило будет существовать только один раз.
Я работаю в магазине, который максимально упрощает бизнес-правила в базе данных. Во многих случаях для достижения лучшего пользовательского опыта мы выполняем идентичные проверки на стороне клиента. Не очень DRY. Будучи SPOT, я ненавижу это.
На другом конце спектра некоторые магазины создают немые базы данных (сообщество Rails опирается в этом направлении) и отбрасывают бизнес-логику на отдельный уровень. Но даже с этой линией некоторые логики проверки заканчиваются на клиентской стороне.
Чтобы еще больше усложнить этот вопрос, я понимаю, почему база данных должна быть рассматриваться как крепость, и поэтому я согласен с тем, что валидации будут соблюдаться/повторяться в базе данных.
Попытка принудительно выполнить проверки в одном месте непросто в свете противоречивых соображений - оставайтесь СУХОЙ, держите базу данных в крепости и обеспечивайте хороший пользовательский интерфейс. У меня есть некоторая идея для преодоления этой проблемы, но я думаю, что есть лучше.
Можно ли сбалансировать эти конфликтующие проблемы в сухом образе?