Теперь, допустим, у нас есть бизнес-правило, которое запрещает пользователю вводить недопустимый адрес электронной почты и ограничивает пользователя именем более 50 символов.
Важные моменты, на которые следует обратить вниманиепример
- У вас нет прав для этих данных.И имя пользователя, и адрес электронной почты назначаются и управляются где-то еще
- Что касается модели домена, эти данные непрозрачны;вы, вероятно, никогда не собираетесь манипулировать им или изменять какие-либо вычисления в зависимости от содержимого.Что касается ваших бизнес-правил, то это просто хэш-значения, которые вы копируете, чтобы вы могли передать их чему-то другому (напечатать имя на конверте или отправить электронное письмо).
Семантически оба эти значения являются просто разновидностями «идентификатора».
В этом случае модель предметной области вообще не заботится о проверке, за исключением таких проблем, как нехватка памяти,Ваша модель данных может заботиться, если у вас есть столбцы фиксированной длины или что-то в этом роде.
Так что это может быть очень легко одним из тех мест, где вы заботитесь о границе сообщения, но не в пределахсам домен.
Но это не очень хороший прокси для общего вопроса о том, где может жить валидация.
Сравните этот случай с чем-то вроде суммы вклада - это число, и вы быразумно ожидать, чтобы добавить / вычесть его из других чисел, сравнить его с другими числами и так далее.Там вы можете посмотреть на что-то вроде Integer.MAX
и сделать разумный вывод, что ошибка атаки / ввода данных гораздо более вероятна, чем подлинный сценарий использования, что вы полностью исключите эту опцию.
Проверка сообщенияГраница в первую очередь определяется вопросом: можете ли вы доверять источнику?Если есть какие-либо сомнения, то нет никаких сомнений.(Деогун и Джоннсон о безопасности, управляемой доменом, являются хорошей отправной точкой).
В основном проверка на границе сообщения сводится к установлению того, что полученная последовательность байтов фактически соответствует схеме сообщения;что, конечно, может включать ограничения на диапазон допустимых значений.(Пример: HTTP-ответы включают коды состояния, но вам не нужно притворяться, что ответ с кодом состояния 777 предназначен для улучшения вашего дня).
И поэтому совершенно разумно объявить, что имяполе в сообщении не должно превышать 50 символов, и что поле адреса электронной почты в сообщении соответствует определению addr_spec в RFC 5322 .
А затем на границе вы убедитесь, чтобайты, которые вы получаете, на самом деле удовлетворяют ограничениям сообщения и долго передают его, если это так.
Но в рамках модели предметной области?если вам не нужно делать предположения о данных, то готово.«Приложение говорит, что это байты? Достаточно хорошо для меня!»
Несколько более технически - ключевой тест состоит в том, имеет ли модель предметной области какие-либо предварительные условия , которые должны быть выполнены для того, чтобыобеспечить правильность его результатов. Если у есть предварительные условия, то проверка служит контролируемым способом выявления нарушений.
Но не так уж много добавочной стоимости, внедряющей модель домена с проверками предварительных условий, которые ему не нужны.
(Опять же, в отличие от amount
- модель домена имеетбольшой интерес в выявлении нарушений до того, как они начнут беспорядочно перемещать деньги).