А зачем отдельный диспетчер у роутера? Я смотрю его хендлеры там мержатся с хендлерами диспетчера сматченного роута. То есть, это что-то вроде групповых мидлтварей для всех роутов, но у нас такой функционал в группах уже есть. Сама идея вынести стек из роута в отдельный диспетчер мне нравится, но я бы все же реализовал бы это не так. Если выпилить диспетчер из роутера, то сам роут может отдавать уже диспетчер с хендлерами и вот его и выполнять в той же мидлтвари роутера
Так... сек. Handler-и - это то, что раньше было middlewares, я просто название поменял, так как технически они как бы не миддлверы, но могут быть любого формата/типа (любого, который поддерживаются диспетчером). Эти так называемы handler-и (то есть middleware-и) можно добавить, как на отдельный маршрут, как группу маршрутов, так и для всего роутера или конкретного диспетчера. И в окончательном итоге все handler-и как мержаться в правильном порядке. Все маршруты из себя представляют DTO имутабельный без особой логики, группы - стали коллекциями (опять без особой логике, это просто список маршрутов, с которым можно будет удобно работать). А вот так называемый ДИСПЕТЧЕР - это единственное звено, которое отвечает, за то, что и как надо делать с матченным маршрутов. Диспетчер по умлочанию оставлен в роутере, чтоб повысить юзабельность, как отдельный пакет. Но в любой момент времени можно переопределить диспетчер как для всего роутера, так и опять можно переопределить диспетчер для единственного маршрута или одной группы (коллекции).