После интеграции компонента маршрутизации в мое приложение у меня есть догадка, почему это было сделано так.
Большинство свойств RequestContext - метод, тело запроса, получение параметров - могут использоваться безмодификации, но в зависимости от желаемой структуры пути и конфигурации сервера (правила перезаписи и т. д.) существует несколько способов предварительной обработки пути.
Это не объясняет, почему путь передается вmatch()
Функция и объект запроса передаются в конструктор, но это объясняет, почему они передаются отдельно.