функция с кучей проверок на то что входящие данные валидны. Проходит какое-то время и нужно написать вторую функцию, которая делает на 90% то же самое что и первая но немного иначе. Проходит еще время - нужно расширить еще в другом месте. Как правильно сделать архитектуру для этого? Вот несколько вариантов которые мне кажутся не оч.
1. Добавить больше аргументов. Мне не нравится потому что много аргументов будут релевантны только в одном частном случае и бойлерплейтом в других.
2. Разбить на мелкие функции и вместо условного validate(args...) вызывать validateA(aArgs...) && vallidateB(bArgs...) && validateC(cArgs...). Минусом я вижу что если появится нужда для validateD(dArgs...) в будущем то нужно будет его добавлять во множестве разных мест.
может какой-то policy-based здесь подойдет?
Вместо кучи проверок использовать больше осмысленных типов, в которых проверки будут зашиты на уровне конструктора
Может надо валидировать данные там где они получаются? А в функциях просто ассертить/падать.
Это и есть функция валидации валидации, раньше неё ничего нет
Непонятно всё. А может не надо писать вторую/третью/пятую функцию? Может сделать класс аргумента таким чтобы в него можно было вносить изменения? И его уже валидировать? Так то можно много чего нафантазировать... А может один параметр от другого зависит etc...
Ну мне кажется это ведь типичная ситуация с которой все сталкиваются: есть запросы которые надо провалидировать, логика сложна и может повторятся, копипастить не хочется, а хочется красивый и расширяемый подход. Класс аргумента можно сделать, не проблема. А что если результат одной проверки является входом другой, хранить его тоже в аргументе?
Ну запрос вообще может быть сложной структурой. И не факт что в одном месте можно весь его логически валидировать.
Без примеров разговор ниочём
> результат одной проверки является входом другой Это как то странно выглядит. Обычно у validate возврат void или bool хотя бы
Обсуждают сегодня