stdray: (Default)
[personal profile] stdray
Проблемы описание маршрутов в ASP.NET MVC известны:
- это слишком многословное описание
- это строки и отсутствие проверки в compile-time корректности маршрута
- это отсутствие хелперов для генерации ссылок

Есть, правда, шаблоны T4MVC, предоставляющие статические хелперы для генерации url'ов по action'ам и доступа к разнообразным view. Однако, проблема со строками в маршрутах остается, проблема проверки соответствия параметров описанных в маршруте и параметров обработчика тоже.

Хотелось бы сделать нормально, чтобы было кратко, интуитивно понятно, с проверками в compile time. Я достаточно давно в фоновом потоке размышляю на этим вопросом. И пока у меня сформировался такой краткий список требований к DSL описания маршрутов:
- внутри строки маршрута должно происходить связывание имен
- необходимо иметь возможность указать слово ХТТП
- необходимы ограничения на связываемые имена (прямо внутри маршрута? отдельно?)
- необходим вывод маршрутов по контроллеру
- возможно, необходима группировка маршрутов по общей части пути
- необходимы параметры по умолчанию
- необходимы имена для маршрутов (опционально?)

Возможно, требуется что-то еще. Однако в силу малого опыта разработки веб-оперденей, я не могу составить полный список потребностей, которые надо покрыть возможностями данного DSL.

Я смотрел описание маршрутов в Django - не очень понравилось. В качестве ограничений регулярки, убивающие читаемость. Из плюсов, пожалуй, возможность "подключить" сразу группу маршрутов и именованные маршруты.

Глядел на описание в Play Framework. Описание достаточно краткое и лаконичное, но нельзя сказать, что богатое возможностями.

И, конечно, я смотрел, как сделано в Ruby on rails. Это, пожалуй, самая продвинутая система описания маршрутизации веб-приложения. Там есть все из моего списка и даже больше. Сложно сказать, насколько удобно оно на практике, но читать такие декларации маршрутов, мне не очень приятно (видимо, из-за непривычности синтаксиса Ruby).

Смотрел какие-то другие поделия, регулярно натыкаясь на описание маршрута, приклеенное к обработчику. Такого счастья точно не надо.

Самая большая проблема, пожалуй, RESTful routes. Идея, лежащая в основе, достаточно проста - есть некоторый набор HTTP Verbs и с их помощью можно отобразить один путь на разные методы контроллера, имитируя действия (CRUD) над объектом (ресурсом). При этом, сразу возникает желание иметь вложенные объекты. И для этого, требуются какие-то специфичные средства описания. Для ASP.NET MVC уже достаточно давно была сделана библиотека, позволяющая несколько сумрачным синтаксисом на лямбдах описывать подобные иерархии. Потом, c выходом четвертой версии фреймворка, оно вроде стало не нужно, поскольку WebApi сам генерирует маршруты. Правда, это не касается вложенных ресурсов. При этом видно, что в дочернем ресурсе происходит накопление параметров от всех родителей. В Ruby, как я понял, принято забирать параметры из словаря, для целей реализации проверок в compile time это подходит мало. Не знаю, существуют ли красивые решения.

По сути, хотел просто сформулировать свои мысли по этому поводу. Но, заодно, пожалуй, спрошу у читающих меня:
- есть ли фреймоворк, где описание маршрутов сделано идеально, который можно взять как пример?
- какие задачи должен решать dsl описания маршрутов, то есть чем вы пользуетесь часто, чем редко, чем хотели бы пользоваться, но не имеете средств?

December 2019

S M T W T F S
1234567
891011121314
15161718192021
222324252627 28
293031    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags