Comments 1
Почему, если есть некая общность в поведении, нельзя сделать так, чтобы она реализовывалась некоторым единым кодом (в виде шаблона или системы классов)? Например, реализовать цепочку как таковую, составить требуемую цепочку (требуемого вида и наполнения) и, затем, использовать её в своём приложении.
Лично для меня вопросы возникают уже в самом начале рассуждений:
Вначале напишем enum PriorityLevel с уровнями ошибки.
Почему здесь нужен enum? А если мы придумаем новый уровень ошибок, то придётся править в нескольких местах?
Логика подсказывает, что, прежде всего, нужен справочник уровней ошибок. Можно было бы ожидать, что такие вещи описываются в приложении декларативно (хотя и могут отдельно записываться в базу метаданных приложения), а все необходимые цепочки собираются в момент старта (загрузки) приложения.
Шаблон «цепочка ответственности» может затруднить определение того какой Handler объект отвечает за обработку конкретного запроса. Это может затруднить отладку кода и понимания его поведения.
Вот было бы здорово, если бы изнутри кода можно было бы узнавать, исполняется ли код в отладочном режиме, или он исполняется в боевом режиме! Здесь могла бы выть своя «цепочка ответственности», где по цепочке передаётся текущий обработчик.
Но!
Это всё — конечные автоматы!!
Почему нельзя саму программу сразу делать в конечных автоматах (например, по Шалыто) ?!?
Шаблон проектирования: Chain of Responsibility