Pull to refresh

Comments 9

    Try {
      params("id").toInt
    } match {
      case Success(id) => DB.getUserById(id)
      case Failure(ex) => pass()
    }

Кошмарный бойлерплейт. В Play достаточно объявить аргумент метода — и он будет считаться параметром запроса. А проверки на валидность реализованы на уровне фреймворка.

Mutability в контроллере тоже доставило. :(
Безусловно, лучше при объявлении маршрута написать регулярку, которая будет пропускать только Int значения, но хотелось продемонстрировать возможность pass().
Про mutability в контроллере — поясните, пожалуйста.
    contentType = formats("json")
    basicAuth()


По мне очевидно, что первая строчка устанавливает какую-то переменную в недрах фреймворка, а вторая ну просто должна тоже что-то установить — в противном случае как фреймворк поймет, что надо проверять аутентификацию?

Регулярку писать — тоже плохой тон — оно нечитаемо в сложных случаях.
Вторая строка ничего не меняет, она вызывает halt(403) в случае если аутентификация не прошла. А эти самые halt, если не ошибаюсь, реализованы через исключения…
Пожалуй, в Play мне тоже маршрутизация побольше нравится, но после Spray это уже кажется вполне рабочим вариантом).
Пробовал его, года два назад. Приложение до сих пор стоит в продакшне. Сам фреймворк нормальный, но смущает несколько вещей:
1) Редко обновляется (последний релиз больше чем полгода назад).
2) Много боли и геморроя с sbt
3) Шаблонизатор по-умолчанию Scalate имеет очень неприятные баги и не совсем интуитивен. Кроме того шаблоны нужно компилировать, а это дополнительное время.
4) Для базы данных пробовал Slick — интересный фреймворк, но на тот момент он был сыроват и не везде интуитивен.
В общем Scala — это как раз один из тех случаев, когда распространению крутого языка мешает его чрезмерная крутость (т.е. сложность) и отсутствие сопоставимой хотя бы с Java инфраструктуры разработки.
Скала сложна только первый год, а потом ничего, втягиваешься.

А что подразумевается под «инфраструктурой разработки» — не совсем понятно. IDE для скалы давно есть, а библиотеки можно и от явы использовать — в этом плане скала как раз уделывает не только всякие-там-пыхапы, но и вполне себе активно развивающиеся Ruby и Javascript
Скала не так уж сложна, но вот, например, добивает подход к написанию библиотек на имплиситах. Сложно разбираться в коде. Макросы, используемые в коде sbt — это вообще что-то запредельное. Очень бесит то, что нужно собирать библиотеки с поддержкой разных версий Scala (почему 2.10 несовместима с 2.11 ?!!!). В общем местами кажется, что ребята идут не по правильному пути.
почему 2.10 несовместима с 2.11 ?!!!

Для этого есть огромное количество причин. Самая простая и наглядная: если в 2.11 в стандартной библиотеке добавили хотя бы 1 не абстрактный метод в 1 трейт, то весь код уже требует перекомпиляции — Java 7 не поддерживает не абстрактные методы в интерфейсах.

Но они очень стараются найти этот правильный путь. Например проект TASTY.
1. Релиз 2.3.1 был в конце марта, сейчас активно готовится релиз 2.4.0 (https://github.com/scalatra/scalatra/releases). Примеры, как раз, с 2.4.0-RC2.
2. Sbt очень активно развивается, попробуйте еще раз. Боль все еще есть, но уже, имхо, не хуже всяких там maven/grandle/ant.
3. Есть еще инструкция по настройке twirl, использующемся в Play. Скорее соглашусь, меня Scalate тоже не слишком впечатлил.
4. Как раз думал в следующей статье написать про Slick. Если есть еще интересующие вопросы — пишите, постараюсь разобрать.
Sign up to leave a comment.

Articles