tgoop.com/stringconcat/352
Last Update:
Работаем со студентами над курсовым проектом и неожиданно уперлись в проблему, которая на первый взгляд кажется тривиальной.
Value Object. Казалось бы, что может быть проще?
Паттерн элементарный, тесты пишутся очень просто, всё логично и прозрачно. Но на практике именно с него начались настоящие трудности.
Почему? Потому что Value Object требует не просто «обернуть данные», а заранее продумать все варианты валидации и граничные условия.
Если раньше хватало поставить что-то вроде @NotBlank в контроллере и надеяться, что кто-то потом в сервисе провалидирует (нет), то теперь приходится разбирать детали:
- Какой должна быть минимальная и максимальная длина имени (к примеру, азиатское имя может состоять из одной буквы)?
- Допустимы ли цифры или спецсимволы? (а если человек зовётся «X Æ A-12 »? Представляю что испытали разработчики государственных систем США увидев ТАКОЕ)
- Что делать с иностранцами: если имя написано латиницей, должна ли и фамилия быть латиницей?
- А если человек решит использовать двойную фамилию через дефис? (и не один раз).
Даже такие на первый взгляд простые сущности, как ФИО, внезапно превращаются в головоломку.
Хорошо, когда у нас есть чёткие и формализованные правила валидации — например, для ИНН или паспорта. Но даже здесь не всё так очевидно.
Даже если формат существует, он далеко не всегда прост.
Возьмём, например, VIN-код автомобиля. Казалось бы, жёстко стандартизированная штука. Но при ближайшем рассмотрении выясняется, что у него есть куча скрытых нюансов: одни символы можно использовать, другие нельзя, разные страны добавляют свои исключения, часть информации хитро кодируется внутри строки.
И вот тут-то и проявляется неожиданная сложность: Value Object, который выглядит как «простейший паттерн», на деле заставляет глубоко задумываться о бизнес-логике и реальных ограничениях данных. Простой паттерн вдруг превращается в философский вопрос: «А что вообще считать правильным значением?», ибо даже часть ограничений или форматов может оказаться нерелевантным для конкретной предметки.
В итоге даже самое базовое поле уже не сводится к «строка не пуста». Оно превращается в полноценное проектное решение, за которым стоит куча вопросов, дискуссий и иногда ощущение, что проще сменить профессию.
Мораль: простые паттерны на практике оказываются не такими простыми. Они вытягивают наружу то, что мы обычно привыкли замалчивать — правила, форматы, ограничения и вариации реальной жизни. И да, внезапно выясняется: самая сложная часть в коде — это не алгоритмы, а люди с их «Фёдорами-Алексеями Петровичами 2».
BY StringConcat - разработка без боли и сожалений
Share with your friend now:
tgoop.com/stringconcat/352