Для моего следующего проекта, веб-приложение, следует использовать scala + калитка или scala + лифт?

Учитывая различные преимущества языка Scala, я решил написать следующее веб-приложение в Scala. Однако, следует ли использовать Wicket или Lift? Я знаком с Wicket, и мне нравится это немного, но очень мало знаю о Lift. Является ли обучение Lift полезным для этого в этом контексте?

В порядке слов, как Лифт сравнивается с Wicket? Учитывая, что веб-приложение будет находиться в Scala, может ли использование Lift облегчить мою жизнь как разработчика?

Ответ 1

Если вам нравится Wicket, вы должны придерживаться того, что знаете и как. Wicket - прекрасный веб-каркас и делает Scala, а Wicket очень приятен, потому что вы можете использовать черты Scala для составления классов в Wicket... он действительно сокращает шаблонный и Java.

Лифтинг имеет сильные стороны, которые не имеет Wicket:

  • Намного лучше поддержка Ajax. Поддержка Ajax для Lift гораздо менее многословна, чем Wicket's. Если вы собираетесь делать много Ajax, обучение Lift может быть ценным.
  • Поддержка комет. Если ваше приложение имеет серверный компонент, Lift предлагает лучшую поддержку кометы, чем любая другая веб-инфраструктура.
  • Подъем больше Scala. Если вы работаете с Java, то Lift использование сопоставления шаблонов и прохождения функций - это кривая обучения.

С точки зрения комментариев в этой теме, я хотел бы не согласиться с некоторыми из сделанных заявлений:

  • Лифтинг не требует, чтобы вы смешивали презентацию и бизнес-логику. Существует множество вариантов для правильного структурирования вашего приложения для вашего стиля кодирования от полного развода презентации и логики до смешивания двух дико и свободно. Ваш выбор.
  • Лифтинг не делает то же самое, что и Rails. Подъем не является еще одной картой MVC, и я не уделял много внимания моему времени на CRUD-аспектах Lift. Лифт - это безопасность, производительность разработчиков, удобство обслуживания и создание высокоинтерактивных веб-приложений Ajax и Comet. Библиотеки Lift содержат много модулей, включая несколько модулей ORM, поддержку JSON и т.д. Это частично связано с нехваткой библиотек в Scala назад 2-3 года назад и из-за того, что сообщество Lift потрясающий и поддерживающий, а процесс выпуска Lift очень хорошо работает (ежемесячные выпуски релиза, которые достаточно стабильны для использования Foursquare.)
  • Подъем не ориентирован на цикл HTTP-запроса/ответа. Лифт ориентирован на то, чтобы отвлечь их. Разработчик тратит меньше времени на беспокойство по поводу именования параметров и больше времени на бизнес-логику.

Но, еще раз, если вам нравится Wicket, придерживаться Wicket - отличный выбор... Wicket еще лучше в Scala.

Ответ 2

Калитка и Лифт - совсем другие звери. У меня есть некоторые знания об обеих структурах (но далеко не на уровне экспертов, который вы обычно видите здесь):

Калитка: на каждой странице веб-сайта есть страница шаблона HTML и класс поддержки Java/ Scala. Магия Wicket заключается в том, чтобы связать страницу шаблона HTML с соответствующим классом и сопоставить каждый идентификатор Wicket в шаблоне с правильным методом в классе, чтобы данные были видны на сгенерированной странице HTML, отправленной клиенту. Это. Wicket - это чистый Web и ничего более. Я очень легко сочиняю ваши собственные графические компоненты в Wicket и наследую их.

Подъем: лифт был создан Дэвидом Поллаком как реакция на проблемы, с которыми он столкнулся с Rails. Ему нужна была производительность и безопасность. Подъем быстрее и надежнее, чем Rails. Это на самом деле очень безопасно и автоматически обрабатывает SQL-инъекции, CRSF, XXS, повторные атаки.

Подъем делает то же самое, что и Rails (карты в DB), но сильно отличается от Rails. Ментальное наследие Rails видно, поскольку некоторые из API в Lift используют синтаксис Ruby (с подчеркиванием и вопросительными знаками в инспекторе), что может удивить разработчика Scala. Подъем не классический MVC-каркас, как Wicket, это Model-ModelView-View. Фактически Lift больше ориентирован на цикл запроса-ответа. Он предназначен для моделирования управляемых событиями графического интерфейса (например, Java Swing или .NET GUI). Это означает, что HTML-элементы и действия записываются в одном и том же месте:

var inputName = ""
SHtml.text(inputName,s => inputName = s)

Этот код создаст входной тег HTML следующим образом:

<input type="text" value=""/>

и подключите функцию к переменной, чтобы сохранить вход. Структура такая же, даже если AJAX используется вместо HTTP GET/POST.

Подъем экспрессивный и мощный, но не очень простой.

Пожалуйста, исправьте меня, если это не точно!

Ответ 3

Я сделал несколько webapps в Lift. Исходя из традиционного фона Java с большим количеством Maven + JSF/Facelets + Spring + Hibernate, я должен признать, что, хотя я люблю Scala, я разочарован некоторыми недостатками Lift. В частности, я думаю, что фрагменты часто смешивают бизнес-правила с деталями интерфейса. Кроме того, внедрение комплексного тестирования очень сложно.

Я не знаком с Wicket, но на данный момент я пишу приложение с помощью Play Framework. Поддержка Scala в основном работает очень хорошо, и есть модуль Akka. Akka отлично подходит для любого нетривиального приложения, которое необходимо масштабировать.

Игра выглядит очень многообещающе, даже несмотря на то, что она все еще активно развивается, и документация, похоже, тоже очень хороша. Структура CRUD удобна для быстрого перехода в функциональное состояние или для создания простого интерфейса администратора для данных, которые не будут меняться очень часто.