Лифт, Играй! или BlueEyes (с кучей рамок JavaScript) - PullRequest
21 голосов
/ 10 февраля 2012

Я попадаю в небольшую загадку.Я создаю новое, современное веб-приложение, и мне нужно не только выбирать технологию, но и архитектуру.Я думаю, что было бы справедливо сказать, что в наши дни это трудный выбор, потому что у нас есть больше вариантов, чем мы сделали даже 5 лет назад.

Прежде всего, я решил, что Scala будет сервером.побочный язык.У меня есть свои причины, и это не сообщение Scala против XYZ - этот выбор был сделан.Я также осознал тот факт, что мы в сети, в облаке, поэтому я даже не собираюсь пытаться уйти от Javascript.Возможно, я сделаю это с CoffeeScript, но я буду писать код, размещенный в браузере.

Теперь, предполагая Scala, большинство людей, вероятно, перейдут на Play! или Lift ,Наверное, играть!учитывая, что это одобрение от Typesafe , но я думаю, что у меня есть еще один более важный вопрос, на который нужно ответить в первую очередь.Что такое архитектура ?Если мне нужен очень богатый клиент, действительно ли мне нужно нечто большее, чем простой уровень обслуживания без сохранения состояния, основанный на том факте, что у нас все равно будет тонна JavaScript?Я не уверен, что это будет одностраничное веб-приложение, но является ли что-то вроде BlueEyes потенциально правильным выбором?Поднимай и играй!гораздо тяжелее, потому что они берут на себя гораздо больше ответственности.Они генерируют HTML, и для этих платформ браузер довольно тупой.Такие вещи, как маршрутизация, валидация, поддержка Ajax и Comet, являются проблемами на стороне сервера.Поскольку сегодня браузер обладает более широкими возможностями, богатые интерактивные функции обычно реализуются путем генерации и внедрения Javascript с сервера.

Мой вопрос сводится к этому.Пойду ли я с традиционным Lift / Play!фреймворк, в котором сервер берет на себя ответственность как клиента, так и сервера, или мне нужен расширенный уровень обслуживания + уровень обслуживания REST, где клиент играет более заметную роль в приложении?Архитектура, в которой клиент имеет дело с маршрутизацией, проверкой, связыванием и т. Д. Я вижу такие структуры, как KnockOut.js , Sammy.js , Sproutcore , Backbone.js , ... Я не собираюсь перечислять их все, но достаточно сказать, что все они используют некоторые из этих базовых функций с точки зрения клиента.

Если явыбрать Play !, я отказываюсь от этого богатого интерфейса?Как насчет ситуаций, когда я хочу предоставить сервисные API для интеграции / гибридного / мобильного использования?Как бы играть!помогите мне здесь?Ясно, что BlueEyes хорошо играет здесь.Я думаю, что мне нужен сервисный слой независимо от того.

Если я выберу BlueEyes, как будет выглядеть мой клиентский код?Сколько из этих основанных на Javascript фреймворков мне нужно, чтобы дать мне то, что мне нужно?Я по-прежнему хочу, чтобы большая часть моей бизнес-логики была на уровне сервисов, но маршрутизация, привязка ... все, что связано с пользовательским интерфейсом, будет заботой клиента.

Я не уверен, что есть правильный или неправильный ответ, но я думаю, что это сообщество, вероятно, может указать мне правильное направление.

Я также разместил это в своем блоге по адресу http://www.andyczerwonka.com/picking-a-web-technology-isnt-as-easy-as-it-u-45228

Ответы [ 7 ]

18 голосов
/ 10 февраля 2012

Если все, что вам нужно, это API-интерфейс REST для бэкэнда, тогда Lift, Play!или Blueye будет работать просто отлично.Но я просто укажу на преимущества использования Lift.

  1. Это неправда, что Lift пытается навязать как переднюю, так и заднюю часть.Мы поддерживаем использование Lift только для REST, и это поощряет для правильного проекта.
  2. Хотя Lift поставляется с jQuery и blueprint, вы можете использовать любую библиотеку javascript и среду css, в настоящее время многие люди насписок рассылки, показывающий, как они используют Twitter Boostrap с Lift.Посмотрите этот модуль Lift , который помогает интегрировать Bootstrap.
  3. С Lift вы можете начать работу без сохранения состояния, и если по пути вы обнаружите, что ваши потребности меняются, вы можете перейти к состоянию.Вы даже можете смешивать и сочетать их в одном приложении.
  4. Хотите современный интерфейс?Кометная поддержка Лифта - одна, если не лучшая, там.Очень простой в использовании, проверенный и проверенный на многих браузерах / рабочих нагрузках.Я написал несколько сообщений , демонстрирующих поддержку комет Lift.
  5. Если вы решите использовать Lift для обоих, как для передней, так и для задней части, вы получите бесплатно приложение, которое защищено по умолчанию, нет необходимостибеспокоиться о xss, xsrf или о многих из 10 самых уязвимых мест безопасности OWASP.
  6. Нужна коммерческая поддержка, список растет здесь
  7. Нужно обучение?В Лондоне готовится базовое обучение , и основатель Lift также проводит другие учебные занятия.
  8. Существует несколько книг о Lift. Lift in Action , Просто Lift и Explift Lift
  9. Существует очень активное сообщество , готовое помочь.
  10. Кто использует лифт?Просто назвать несколько: Foursquare , OpenStudy , The Guardian UK , StackMob и многие другие.

Хорошо, я должен остановиться на этом, но вкратце, Lift - это потрясающая структура, которая может предложить многое, вы берете столько или меньше, сколько вам нужно.

4 голосов
/ 11 февраля 2012

Бета-версия Play 2.0 содержит пример приложения, которое именно то, что вы ищете (ZenContacts). Его серверная часть - это просто набор спокойных интерфейсов, в то время как клиентская часть использует coffeescript и т. Д. Для создания насыщенного пользовательского интерфейса.

4 голосов
/ 10 февраля 2012

Насколько я знаю, оба играют! и Lift можно использовать как «бэкэнд», и вы можете использовать HTML5 + CSS + JS в качестве «фронтэнда»; они не обязательно ограничивают вашу способность создавать интерфейс, который вы желаете, поэтому отвергать их по этой причине было бы глупо. Обратите внимание, что такие вещи, как knockout.js, рекламируют, что они «работают с любым веб-фреймворком». Тем не менее, это может быть правдой, что они более «тяжелые», чем вам нужно.

Я никогда раньше не слышал о BlueEyes, но, похоже, он нацелен на конкретный вид использования. Если это соответствует вашему счету, то, вероятно, это будет наиболее рациональное решение вашей проблемы.

Но если это то, что вы планируете на самом деле разместить в сети, то «маршрутизация, проверка, связывание и т. Д.» Практически требуют для обработки серверной частью; Я просто не могу представить, чтобы какая-либо из этих вещей (надежно) обрабатывалась кодом, который выполняется в браузере клиента. Кроме того, если ваши пользователи решат отключить JavaScript, ваш веб-сайт будет полностью недоступен.

2 голосов
/ 10 февраля 2012

Если я выберу Play !, я отказываюсь от этого богатого пользовательского интерфейса?

Что именно вы подразумеваете под богатым пользовательским интерфейсом?больше JavaScript на веб-интерфейсе?

Если вы считаете - HTML5 + CSS3 + jQuery как богатый пользовательский интерфейс - тогда они очень хорошо работают с любым «бэкэндом» (Lift / Play).

Другая вещь, которую вы можете рассмотреть, это зрелость платформы.Как вы упомянули, Play 2.0 изначально поддерживает Scala, поддерживает Typesafe и быстро внедряется.Кроме того, вы можете легко предоставлять сервисы RESTful и использовать их во внешнем интерфейсе (одно из ваших требований).

Склонность к HTML5 + CSS3 + jQuery + Play 2.0:)

только мои мысли ..

0 голосов
/ 13 февраля 2012

Я посмотрел на Apache Click, Wicket, немного Lift (немного похоже на калитку), а затем играть в 1.2.4.Пока все хорошо с Play.Действительно красивый подход к веб-разработке.Продолжайте в том же духе, играйте!команда.

0 голосов
/ 11 февраля 2012

Определенно взгляните на http://twitter.github.com/finagle, прежде чем принять решение.Finagle может позаботиться о большинстве ваших вещей.Он разработан на основе очень гибкой архитектуры, которая разумно разделяет проблемы с помощью фильтров.

0 голосов
/ 10 февраля 2012

Что такое архитектура ?

Играть!настоятельно рекомендует вашему серверу использовать архитектуру MVC, создавая пакеты по стандартному шаблону:

app/
  controllers/
    Application.scala
  views/
    Application/
      index.scala.html
  models/
public/
  images/
  stylesheets/
  javascripts/

Это облегчает следование архитектуре, чем ее нарушение.для Lift или BlueEyes, но на самом деле ни один из них не поддерживает архитектуру так сильно.

...