В настоящее время я работаю над прошивкой USB для проекта. Выясняя, как лучше всего обрабатывать запросы на обслуживание от хоста, я решил реализовать шаблон цепочки ответственности.
В моем приложении всегда будет ровно один обработчик для каждого запроса, полученного от хоста. Таким образом, я заранее настроил свою цепочку обработчиков, и цикл начинается с ожидания запроса от хоста. Запрос передается «корневому» обработчику, который, изучив часть запроса, решает, обрабатывать ли его или передать дальше по цепочке. Как только запрос обработан, мы возвращаемся к ожиданию другого запроса от хоста.
Опять же, только один обработчик будет обрабатывать запрос. Необработанный запрос, т. е. прохождение всей цепочки обработчиков, является состоянием ошибки.
После прочтения о шаблоне цепочки ответственности на сайте www.sourcemaking.com эта цитата привлекла мое внимание ( последний абзац в разделе «Обсуждение»):
Не используйте цепочку ответственности, когда каждый запрос обрабатывается только одним обработчиком или когда клиентский объект знает, какой сервисный объект должен обрабатывать запрос.
Есть ли веская практическая причина, почему это так? Мне кажется, что использование Chain of Responsibility в случае, против которого предостерегает автор, вполне правомерно. Может ли кто-нибудь дать мне некоторое представление о том, почему это был бы плохой выбор дизайна?