Послание это одно. Контейнер данных.
Проверка - это отдельная вещь. Валидация отделена от сообщения, потому что проверка зависит от данных, не относящихся к сообщению. Валидация включает в себя один или несколько алгоритмов, которые устанавливают, можно ли построить достоверное Сообщение из некоторых данных.
Вы хотите, чтобы сообщения создавались только , когда они действительны. Вы хотите, чтобы все методы сообщения требовали и зависели от достоверности. Это дает вам легкую для понимания ответственность.
Следовательно, Сообщение не должно содержать никакой логики проверки. Эта логика живет за пределами действительного Послания. Это часть MessageFactory
или MessageValiadtor
, которая определяет, может ли некоторая заданная лужа данных использоваться для построения действительного Сообщения.
У вас есть две вещи: MessageValidator
(или MessageFactory
) и Message
.
В сообщении нет isValid
. Он должен быть действительным или не существовать.
MessageValidator создает сообщения из исходных данных. Если он не может создать сообщение, может выдать исключение. Он также должен накапливать список найденных ошибок, чтобы его можно было опросить, чтобы определить, в чем заключались различные проблемы.
Рассмотрим возможные мутации: многовариантные подклассы Message. Валидатор может идентифицировать определенный подкласс. Для реализации этого не требуется никаких изменений приложения.
Несколько валидаторов для особых ситуаций, исключений, расширений и т. Д. Это просто подкласс MessageValidator с тем же интерфейсом, который есть у всех валидаторов, и испускает экземпляр Message (или один из его подклассов).
Поскольку правила проверки отделены от действительного сообщения, Валидатор также может предоставлять различные предполагаемые значения по умолчанию или производные данные.