Обычно всегда существует некоторое дублирование, и базы данных не являются просто немыми репозиториями.
база данных гарантирует целостность на уровне данных. Ограничения внешнего ключа, не пустые ограничения и ограничения размера все существенно покрыты базой данных.
Вы не можете сделать всего в дб, но можно сделать много. Защитите данные.
, Перемещающий уровень вверх, у Вас есть бизнес-логика. Обычно это - Ваша точка интеграции с другими приложениями (веб-сервис, Ваш собственный UI, и т.д.). Здесь бизнес-логика в закодированном в приложение. Вещи как то, если продукт имеет дату окончания x, то не может также произойти в y, если y имеет различную дату окончания.
было бы трудно описать такое правило в базе данных, таким образом, Вы не делаете. Но Ваш слой бизнес-логики все еще прерывает вещи, которые он знает, недопустимы. например, если полю описания не позволяют быть пустым, бизнес-логика никогда не должна отправлять его в базу данных. Это будет ошибка независимо, но Вы пытаетесь прервать вещи в точке, они, как известно, плохи.
также трудно выразить в базе данных, другие 'правила' как 'новые пользователи имеют дату окончания срока действия 1 года, если они от Arkensas, 2 года иначе, если у них нет 3 детей, и одного из них называют Barry'. Мы можем смеяться над этим примером, но закаленный программист скажет Вам, что бизнес-логика является одним из самых больших оксюморонов вокруг.
, Перемещающийся до UI, UI также регулярно кодирует бизнес-логику на экранах. Формы и другие страницы будут часто существовать в недопустимом состоянии, и это - задание UI для знания правил, по крайней мере, большую часть времени. Надо надеяться, UI задерживает логику к бизнес-слою, но бизнес-слой не имеет подсказки, что поле 1 является датой истечения срока, и поле 2 является описанием.
UI знает для поиска продуктов с X, если пользователь уже выбрал виджет Y. UI знает, что описание требуется, и что количество объекта> 0 и < 100 (В этих примерах хороший UI будет полагаться на бизнес-слой для сообщения его, например, минута и макс., но UI все еще знает об отношениях)
В веб-UI мы также добавляем клиентский сценарий, который снова копирует логику в серверном коде. Мы используем клиентский сценарий, чтобы сделать, чтобы лучший пользователь испытал, но в конце не доверяют ничему, что прибывает от клиента (сценарий может быть выключен, поля формы, которыми вручную управляют, и т.д.)
<час>, Таким образом, Вы видите, что логика будет дублирована. Вы пытаетесь уменьшить дублирование как можно больше, но реалистично это редко возможно, учитывая нетривиальную программу.
Примечание. Не пишите new Boolean (myString)
в Java - всегда используйте Boolean.valueOf (myString)
. Использование нового варианта
без необходимости создает логический объект
; использование варианта valueOf
этого не делает.