Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.218.61.16] |
|
Сообщ.
#1
,
|
|
|
Добрый день.
Не нашел достаточно информации по этому антипаттерну. Объясните что это такое. |
Сообщ.
#2
,
|
|
|
Судя по названию и слову "антипаттерн", это подход к управлению бизнес-логикой через исключения: в зависимости от входных данных и прочих условий, бросаются различные типы исключений. И внешний обработчик имеет свой алгоритм обработки каждого из них. Т.е. часть логики приложения сидит в catch {}.
|
Сообщ.
#3
,
|
|
|
deil
А почему это считается плохо? Почему лучше реализовать бизнес-логику через коды ошибок? |
Сообщ.
#4
,
|
|
|
наверно потому, что обработка исключения занимает больше времени, чем обработка возвращенного кода ошибки
|
Сообщ.
#5
,
|
|
|
www, не везде. В python, к примеру, исключения относительно шустрые. for-циклы в python - яркий пример применения вышеуказанного анти-паттерна:
for item in collection: do_something(item) Объект collection возвращает итератор, для которого на каждой итерации цикла вызывается функция next(), возвращающая очередной элемент коллекции. Если next() выбросит исключение StopIteration, цикл заканчивается. А использовать исключения для бизнес-логики не следует, потому что поток исполнения (program flow) прыгает из одного места в другое как бешеный кролик. Разобраться как это всё работает очень непросто. Не зря ведь придумали правило: исключения - для исключительных ситуаций. |