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

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

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


person Ceki    schedule 12.07.2010    source источник
comment
Что будет делать ваше приложение? Какие функции вам нужны? Что бы вы хотели сделать из того, что Wicket не поддерживает или поддерживает с трудом?   -  person James Black    schedule 13.07.2010
comment
Веб-приложение может со временем стать очень сложным, но для простоты предположим, что веб-приложение будет иметь страницу, содержащую несколько полей поиска и таблицу, показывающую результаты поиска. Большинство других страниц, вероятно, также будут содержать формы.   -  person Ceki    schedule 13.07.2010


Ответы (3)


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

У лифта есть сильные стороны, которых нет у калитки:

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

Что касается комментариев в этой теме, я хотел бы не согласиться с некоторыми сделанными утверждениями:

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

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

person David Pollak    schedule 13.07.2010

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

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

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

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

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

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

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

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

Подъем выразительный и мощный, но не очень легкий.

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

person olle kullberg    schedule 13.07.2010
comment
Я бы вообще не назвал Wicket классическим MVC. На самом деле, проблемы MVC — это именно то, что прекрасно справляется с преодолением. В Wicket на самом деле нет контроллеров. Это также очень ООП, что делает его очень компонуемым способами, для которых MVC ужасен. Я бы не сказал, что типичный Web MVC вообще очень соответствует объектно-ориентированной архитектуре. - person jpswain; 06.02.2011
comment
@orange80 Вы, наверное, правы. Если Swing — это чистый MVC, то Wicket — не столько MVC (как Swing). Что, вероятно, меня смутило, так это то, что и Swing, и Wicket очень объектно-ориентированные, как вы говорите. - person olle kullberg; 09.02.2011

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

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

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

person Magnus    schedule 12.07.2010
comment
Вы предлагаете здесь java+play или scala+play? - person rogerdpack; 30.07.2010
comment
Я в основном использовал scala + play, но java + play более зрелый, если это важно для вас. - person Magnus; 30.07.2010