Весьма амбициозное утверждение можно увидеть на официальном сайте проекта. Там же предлагается в этом убедиться на примерах. Лично мне судить сложно, я пользовался только Java веб фреймворками, и то далеко не всеми. Поэтому я попробую рассказать об этом подробнее, а выводы пусть каждый сделает сам.
Самое важное, что нужно отметить — это отсутствие утверждения «лучший из всех». И это понятно, хотя бы потому, что Lift — сложнее большинства фреймворков. Во-первых, потому что он активно использует функциональную сторону Scala, во-вторых, потому что Scala — язык с сильной статической типизацией. Но, для тех, кто готов учиться, Lift — инструмент действительно адски мощный (знаю по опыту, последние несколько месяцев использую его в работе).
Основные факты:
Как уже было сказано, Lift активно использует функциональную сторону Scala. Это отражается во-первых, на том, что вам не надо думать о том, как посылать и получать информацию с клиента, как её преобразовывать, какие интерфейсы имплементировать и как их правильно связывать. Вместо этого вы просто пишете, что делать. Простейший классический пример: есть кнопка, которая при нажатии отправляет запрос на сервер, там должны выполниться какие-то действия, после которых на браузер должен быть прислан какой-то ответ. Смотрим на код.
Шаблон:
Scala код:
Выводим в консоль сообщение и возвращаем javascript для выполнения на клиенте. Всё! Минимум кода, максимум результата. И этот подход прослеживается во всех частях фреймворка.
из Lift, которые в других фреймворках делаются заметно сложнее или вообще не реализованы:
Кроме перечисленных выше возможностей, есть весь необходимый набор:
И т.д. и т.п. Ко всему этому важно добавить мощь самого языка Scala, который лично меня, после долгих лет работы с Java, не перестаёт радовать каждый день.
Я пробовал основательно заняться Lift раза 3 за последний год. И как-то не мог ухватить сути, бросал. Даже стал делать прототип веб интерфейса по работе на Vaadin. Но в конце 2010 года, попробовав очередной раз, смог разобраться и теперь жутко рад. Я думаю, что причина неудачных попыток, в основном, в том, что надо привыкнуть к функциональному подходу. Привычки Java на самом деле глубоко сидят и мешают мыслить в другом разрезе.
Поэтому, прежде чем серьёзно браться за Lift, стоит, пожалуй, почувствовать уверенность в пользовании функциональными возможностями Scala.
Все достойные книжки по Scala и Lift либо бесплатные, либо не сложно достать. Для Scala лучшим вариантом будет Programming in Scala 2nd edition. Lift я изучал, в основном, по примерам из дистрибутива, Wiki и бесплатной книге от создателя — Simply Lift. На хорошо обдуманные вопросы быстро и качественно отвечают либо на StackOverflow, либо в гугл-группах по Scala и Lift.
Самое важное, что нужно отметить — это отсутствие утверждения «лучший из всех». И это понятно, хотя бы потому, что Lift — сложнее большинства фреймворков. Во-первых, потому что он активно использует функциональную сторону Scala, во-вторых, потому что Scala — язык с сильной статической типизацией. Но, для тех, кто готов учиться, Lift — инструмент действительно адски мощный (знаю по опыту, последние несколько месяцев использую его в работе).
Для начала — немного справочной информации
Основные факты:
- Начало разработки — 2007 год, первая версия — 2009 год, текущая версия — 2.2.
- Уже в 2009 году Foursquare полностью переписан с PHP на Scala/Lift, сейчас Foursquare — это более 6 млн. пользователей и несколько тысяч запросов в секунду
- Написан на Scala, а значит совместим со всеми библиотеками на JVM, сервлет контейнерами и т.д. Можно просто подключать .jar-ы к существующему Java веб приложению, править web.xml и пользоваться.
- Разрабатывая идею, авторы постарались взять всё лучшее из самых мощных фреймворков того времени — Rails, Django, Wicket и др.
- Шаблоны Lift — валидный HTML, не могут содержать кода, но не являются необходимыми, можно генерировать HTML прямо из кода, тем более что в Scala есть встроенная поддержка XML.
- Вся логика и настройки реализуются исключительно на Scala, без специальных XML-файлов или других инструментов.
- При помощи SBT и JRebel цикл разработки (время между внесением изменений в код и обновлением в браузере) сокращается до нескольких секунд.
- Автоматически гарантирует защиту от 6 из 10 наиболее опасных уязвимостей (по версии OWASP). В реальных системах это подтверждено, например, Расмусом Лердорфом для Foursquare.
Как уже было сказано, Lift активно использует функциональную сторону Scala. Это отражается во-первых, на том, что вам не надо думать о том, как посылать и получать информацию с клиента, как её преобразовывать, какие интерфейсы имплементировать и как их правильно связывать. Вместо этого вы просто пишете, что делать. Простейший классический пример: есть кнопка, которая при нажатии отправляет запрос на сервер, там должны выполниться какие-то действия, после которых на браузер должен быть прислан какой-то ответ. Смотрим на код.
Шаблон:
<button id="b">Push me</button>
Scala код:
"#b [onclick]" #> ajaxInvoke(() => {println("server"); Alert("client")})
Выводим в консоль сообщение и возвращаем javascript для выполнения на клиенте. Всё! Минимум кода, максимум результата. И этот подход прослеживается во всех частях фреймворка.
Семь вещей
из Lift, которые в других фреймворках делаются заметно сложнее или вообще не реализованы:
- Отложенная загрузка: можно пометить части страницы, которые генерируются долго, Lift позаботится о том, чтобы остальные части загрузились сразу, а медленные — как только будут готовы.
- Паралелльная генерация страницы: можно пометить несколько участков страницы для паралелльной генерации, для них автоматически будут выделены новые потоки.
- Comet и Ajax: простейший Comet-чат реализуется в 20 строк кода, по тому же принципу, что и пример выше.
- Связанные Ajax-компоненты (Wiring): моя любимая новая возможность — позволяет связать (даже в несколько ступеней) несколько Ajax компонентов на странице, и они будут заново отрисовываться при необходимости.
- Дружественные дизайнерам шаблоны: в последней версии стали ещё красивее — инструкции для Lift передаются через второй атрибут
class
. В моём проекте, например, шаблоны можно открывать как обычный HTML и они выглядят в точности как страница приложения, только без динамики. - Многостраничные формы (Wizard): декларативным способом описанные формы, поддерживающие кнопку Back, которые можно запускать либо многостранично, либо через Ajax. Раньше эти формы были фишкой JBoss Seam, теперь в Lift это ещё удобнее.
- Безопасность: благодаря грамотному использованию статической типизации и функционального программирования, Lift гарантирует защиту от большинства наиболее опасных для интерактивных веб приложений уязвимостей.
И всё остальное
Кроме перечисленных выше возможностей, есть весь необходимый набор:
- меню, авторизация, свой ORM и простая интеграция с другими ORM (я, например, по привычке использую Hibernate);
- готовое пустое приложение, с которого удобно начинать;
- в последней версии появился очень классный Dependency Injection с возможностью менять зависимости на время сессии, запроса и т.д.;
- локализация;
- загрузка файлов;
- набор инструментов для создания веб сервисов;
И т.д. и т.п. Ко всему этому важно добавить мощь самого языка Scala, который лично меня, после долгих лет работы с Java, не перестаёт радовать каждый день.
Как со всем этим быть?
Я пробовал основательно заняться Lift раза 3 за последний год. И как-то не мог ухватить сути, бросал. Даже стал делать прототип веб интерфейса по работе на Vaadin. Но в конце 2010 года, попробовав очередной раз, смог разобраться и теперь жутко рад. Я думаю, что причина неудачных попыток, в основном, в том, что надо привыкнуть к функциональному подходу. Привычки Java на самом деле глубоко сидят и мешают мыслить в другом разрезе.
Поэтому, прежде чем серьёзно браться за Lift, стоит, пожалуй, почувствовать уверенность в пользовании функциональными возможностями Scala.
Все достойные книжки по Scala и Lift либо бесплатные, либо не сложно достать. Для Scala лучшим вариантом будет Programming in Scala 2nd edition. Lift я изучал, в основном, по примерам из дистрибутива, Wiki и бесплатной книге от создателя — Simply Lift. На хорошо обдуманные вопросы быстро и качественно отвечают либо на StackOverflow, либо в гугл-группах по Scala и Lift.