170 похожих чатов

Поцоны, вопрос по дизайну и архитектуре. У приложения есть большая

функция с кучей проверок на то что входящие данные валидны. Проходит какое-то время и нужно написать вторую функцию, которая делает на 90% то же самое что и первая но немного иначе. Проходит еще время - нужно расширить еще в другом месте. Как правильно сделать архитектуру для этого? Вот несколько вариантов которые мне кажутся не оч.
1. Добавить больше аргументов. Мне не нравится потому что много аргументов будут релевантны только в одном частном случае и бойлерплейтом в других.
2. Разбить на мелкие функции и вместо условного validate(args...) вызывать validateA(aArgs...) && vallidateB(bArgs...) && validateC(cArgs...). Минусом я вижу что если появится нужда для validateD(dArgs...) в будущем то нужно будет его добавлять во множестве разных мест.

может какой-то policy-based здесь подойдет?

8 ответов

21 просмотр

Вместо кучи проверок использовать больше осмысленных типов, в которых проверки будут зашиты на уровне конструктора

Может надо валидировать данные там где они получаются? А в функциях просто ассертить/падать.

Oleksandr-Senkovych Автор вопроса
Dmitry Sokolov
Может надо валидировать данные там где они получаю...

Это и есть функция валидации валидации, раньше неё ничего нет

Oleksandr Senkovych
Это и есть функция валидации валидации, раньше неё...

Непонятно всё. А может не надо писать вторую/третью/пятую функцию? Может сделать класс аргумента таким чтобы в него можно было вносить изменения? И его уже валидировать? Так то можно много чего нафантазировать... А может один параметр от другого зависит etc...

Oleksandr-Senkovych Автор вопроса
Dmitry Sokolov
Непонятно всё. А может не надо писать вторую/треть...

Ну мне кажется это ведь типичная ситуация с которой все сталкиваются: есть запросы которые надо провалидировать, логика сложна и может повторятся, копипастить не хочется, а хочется красивый и расширяемый подход. Класс аргумента можно сделать, не проблема. А что если результат одной проверки является входом другой, хранить его тоже в аргументе?

Oleksandr Senkovych
Ну мне кажется это ведь типичная ситуация с которо...

Ну запрос вообще может быть сложной структурой. И не факт что в одном месте можно весь его логически валидировать.

Oleksandr Senkovych
Ну мне кажется это ведь типичная ситуация с которо...

> результат одной проверки является входом другой Это как то странно выглядит. Обычно у validate возврат void или bool хотя бы

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта