Ryan Baldwin. «Clojure Web Development Essentials»

27 декабря 2015 г.

Ryan Baldwin. Clojure Web Development Essentials. Birmingham, Packt Publishing, 2015. 232 p.

2015-й год мне запомнился, среди всего прочего, знакомством с прекрасным языком Clojure.

Ryan Baldwin. Clojure Web Development Essentials

Поскольку одной консолью сыт не будешь, я начал искать веб-фреймворки и посвященную им литературу. Литературы оказалось совсем немного, ровно две книжки на английском языке: «Web Development with Clojure» канадца Дмитрия Сотникова и «Clojure Web Development Essentials» Райана Болдуина, тоже канадца. Учитывая растущую популярность Clojure, в будущем, скорее всего, появятся и другие пособия (возможно, даже с русским переводом), но на момент написания этих строк приходилось выбирать из двух перечисленных.

Если зайти на страницы авторов на Github, то преимущество Сотникова, создавшего ряд популярных библиотек на Clojure, кажется неоспоримым. Но пролистав обе книги, я остановился на Болдуине. У Сотникова сразу бросалось в глаза, что на протяжении всей книги логика беспощадно перемешана с представлением, да еще и не чистым HTML, а HTML в виде страшных Clojure-векторов. По-моему, даже в учебных целях такой подход сомнителен. Это напоминает учебники по китайскому языку, где читатель учит только пиньинь, а в последней главе ему сообщают, что, оказывается, еще бывают и иероглифы. И это при том, что сам же Сотников является автором прекраснейшего шаблонизатора Selmer, о котором пишет его «конкурент» Болдуин! («Конкурента» я взял в кавычки, потому что в предисловии Болдуин признается, что к написанию книги его подтолкнул сам Сотников.)

Примерно на 200 страницах автор показывает основные этапы разработки простенького веб-приложения с говорящим названием Hipstr. При этом используются такие инструменты:

  • Leiningen — инструмент для автоматизации сборки Clojure-приложений.
  • Luminus — веб-фреймворк. Фактически — один из шаблонов Leiningen и обертка для ряда популярных библиотек.
  • Ring — слой абстракции над HTTP, позволяющий приложению легко взаимодействовать с сервером. Аналог WSGI и Rake.
  • Compojure — библиотека, реализующая роутинг.
  • Lib-Noir — сессии, куки, ограничение доступа и другие полезности.
  • Selmer — отличный шаблонизатор в духе Django.
  • Timbre — ведение логов.
  • Validateur — валидация данных.
  • YeSQL — интересная библиотека бля работы с БД, являющаяся компромиссом между нагромождением SQL-кода в логике и запутанными DSL. Чистые SQL-запросы помещается во внешние файлы, а для доступа к ним генерируются функции.
  • Migratus — библиотека для миграций, реализованная в виде плагина (для управления миграциями из командной строки) и API (управление из приложения).
  • Environ — управление окружениями (dev, test, prod).

В конце книги есть «аппендикс», вкратце описывающий симпатичный DSL для SQL Korma.

В целом книга Болдуина производит хорошее впечатление. Не тратя драгоценные страницы на такую муру, как «Что такое Clojure и чем он лучше Обычного Языка Программирования» и «100500 способов установить Clojure на Win/Linux/Mac», автор сразу берет быка за рога и излагает такие вещи, как:

  • создание нового проекта, его структура;
  • логирование;
  • роутинг;
  • рендеринг шаблонов;
  • обработка форм;
  • тестирование;
  • работа с БД, транзакции;
  • сессии, куки, аутентификация пользователей;
  • управление окружениями и развертывание приложения.

Предполагается, что читатель уже знаком и с Clojure, и с веб-разработкой. Книга пропитана хорошим чувством юмора, но не зашкаливающим до состояния болезненного (как в небезызвестном туториале Хиггинботама «Clojure for Brave and True», напоминающем монолог обкуренного клингона).

Есть и недостатки. Во-первых, книга стремительно устаревает из-за выхода новых версий многочисленных библиотек. Несмотря на 2015-й год выпуска, это ощущалось не только по номерам версий, но и по новым способам реализации старых вещей. Во-вторых, в книге много опечаток. Частенько приходится гуглить, чтоб разобраться, почему перепечатанный листинг не работает. И, наконец, в книге даже вкратце не рассматривается ClojureScript.

В общем, «Clojure Web Development Essentials» — неплохое пособие для старта. С полученными навыками можно безболезненно окунаться в леденящую бездну официальных туториалов.