Как стать автором
Обновить

Комментарии 19

Рельсы используют «easy» подход, а clojure — «simple». Можно за это ругать рельсы, и многие упреки будут объективными, но можно взять из рельс лучшее, в частности роутинг. Если вы не сталкивались с rails, или есть какие-то предубеждения, то можно просто ознакомиться, как сделан роутинг у них — http://guides.rubyonrails.org/routing.html
В Rails инфраструктурные вещи вообще очень удобно сделаны. Кроме роутинга, вне Rails, мне не хватает миграций бд (flyway — жалкое подобие) и лейаутов. Выбирал из java/groovy/scala веб-фреймворков. Подобный маппинг имеет из коробки лишь Grails. Еще asset pipeline в rails удобен, но для частого сейчас SPA он как правило, не нужен.
Еще рельсы очень быстро запускаются. Что хорошо для TDD, индивидуальный тест быстро стартует, даже если прогружает почти все рельсы (не integrational тест, что то из model/controller/view).
Еще рельсы очень быстро запускаются.

Шутите? 15-20 секунд — это очень быстро?
Чтобы хоть как-то снизить время ожидания, придумана куча воркэраундов типа Zeus, Spork, Spring.

Нет, не шучу, только что проверил — полный прогон одного example rspec (указывается номер строки в коде) — 3-4 секунды.
Пожилое rails 4 приложение на ruby 2.2.5 (71 гем в Gemfile).
Для сравнения, play framework прогоняет пустой тест в голом (!) аппе за 10 секунд.

Причиной такой долгой загрузки рельсов (15-20 сек) может быть большое кол-во мелких гемов.
Прелоадеры терпеть не могу из-за глюков.
Причиной такой долгой загрузки рельсов (15-20 сек) может быть большое кол-во мелких гемов.

Или просто размер приложения :-)
Впрочем, на мой взгляд, даже 3-4 секунды — это не очень быстро, хотя это уже приемлемо.
А "очень быстро" — это про миллисекунды.

Хорошо, переформулирую, как — «сравнительно быстро»)
Просто я сравнивал реальное приложение на rails и пустое на фреймворк N.
(resources :pages 'page-id pages-controller)

А почему не сделать resources макросом и до конца уж эмулировать роутинг в стиле Rails? Это ж Lisp, тут милое дело DSL создавать.


(def routes
  (build-routes
    (resources :pages)))

Кстати, есть поддержка неймспейсов и вложенных ресурсов? Что-то типа:


(def routes
  (build-routes
    (namespace :admin
      (resources :pages
        (resources :comments)))))
А почему не сделать resources макросом

Макросы — это "темная магия" и без надобности ее применять не стоит. В данном случае все можно сделать через функции.


Кстати, есть поддержка неймспейсов и вложенных ресурсов? Что-то типа:

Конечно, в статье это упоминается, вот пример:


(resources :pages 'page-id {:index identity
                            :new identity
                            :create identity
                            :show identity
                            :edit identity
                            :update identity
                            :destroy identity}
           :collection
           [(action :archived identity)]
           :member
           [(resources :comments 'comment-id {:index identity})])

По-моему тут как раз надобность есть, я вон даже не заметил вложенный ресурс в коде, потому что он визуально перегружен. Например, какой смысл identity 9 раз писать?

Действительно, зачем тут identity 9 раз написано?


{:index identity
                            :new identity
                            :create identity
                            :show identity
                            :edit identity
                            :update identity
                            :destroy identity}

это inline контроллер, а identity — обработчик-заглушка.


Это второй пример использования и я показываю другой вариант, в первом примере используется отдельный контроллер.

Ладно, я Вас понял. Вы считаете, что предлагаемый Вами синтаксис роутов удобно читать… Непонятно только зачем было сравнивать его с Rails, ведь сравнение не в вашу пользу :-)


Ну, обработчик-загрушка и что? Что мешает написать примерно так:


(resources :pages 'page-id identity :only '(:index, :new, :create, :show, :edit, :update, :destroy))

Впрочем ладно, что-то я разошёлся… Через годик освоитесь с макросами, перестанете считать их "тёмной магией" и всё будет чудесно.

Конечно, спасибо за комментарии.

выпустил новую версию, полностью переработал библиотеку, добавил исчерпывающие примеры


https://github.com/darkleaf/router

НЛО прилетело и опубликовало эту надпись здесь

Я делаю проект-пример по работе с этой библиотекой, как раз покажу как с ресурсами работать.
Да, я видел эти библиотеки, спасибо.
Рендеринг через nashorn?

НЛО прилетело и опубликовало эту надпись здесь

Это работает только если вы все компоненты на rum делаете, а если нужно какой-то внешний реакт-компонент, то это не сработает. Нужен какой-то js движок: nodejs или nashorn

НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории