Я нахожусь в некоторой загадке. Я создаю новое, современное веб-приложение, и не только я должен выбрать технологию, я должен выбрать архитектуру. Я считаю справедливым сказать, что в наши дни это сложный выбор, потому что у нас есть больше возможностей, чем мы сделали еще 5 лет назад.
Прежде всего, я принял решение о том, что Scala будет серверным языком. У меня есть свои причины, и это не сообщение Scala против XYZ - этот выбор был сделан. Я также согласен с тем, что мы в сети, в облаке, поэтому я даже не собираюсь пытаться уклониться от Javascript. Возможно, я буду с CoffeeScript, но я буду писать код, размещенный в браузере.
Теперь, предполагая Scala, большинство людей, вероятно, перейдут к Play! или Lift. Наверное, играй! учитывая его подтверждение от Typesafe, но я думаю, что у меня есть еще один важный вопрос, который должен отвечать первым. Что такое архитектура? Если мне нужен очень богатый клиент, мне действительно нужно больше, чем простой уровень обслуживания без состояния, основанный на том, что в любом случае у нас будет тонна Javascript? Я не уверен, что это будет одностраничный webapp, но что-то вроде BlueEyes потенциально правильный выбор? Поднимайтесь и играйте! намного более тяжеловесны, поскольку они берут на себя большую ответственность. Они генерируют HTML и для этих фреймворков, браузер довольно тупой. Такие вещи, как маршрутизация, валидация, поддержка Ajax и Comet, относятся к серверной части. Поскольку браузер сегодня более эффективен, богатые интерактивные функции обычно реализуются путем генерации и ввода Javascript с сервера.
Мой вопрос сводится к этому. Я иду с традиционным Lift/Play! где сервер берет на себя ответственность как клиента, так и сервера, или я иду с богатым клиентом + уровень сервиса REST, где клиент занимает более важную роль в приложении? Архитектура, где клиент имеет дело с маршрутизацией, проверкой, привязкой и т.д. Я вижу фреймворки, такие как KnockOut.js, Sammy.js, Sproutcore, Backbone.js,... Я не буду перечислять их все, но достаточно сказать, что все они используют некоторые из этих функций инфраструктуры с точки зрения клиента.
Если я выберу Play!, я откажусь от некоторых из этого богатого пользовательского интерфейса? Что касается ситуаций, когда я хочу предоставить API-интерфейс услуги для интеграции/mashup/мобильных целей? Как играть? помогите мне здесь? Очевидно, BlueEyes хорошо играет здесь. Мне кажется, что мне нужен сервисный уровень.
Если я выберу BlueEyes, как выглядит мой клиентский код? Сколько из этих основанных на Javascript фреймворков мне нужно, чтобы дать мне то, что мне нужно? Я по-прежнему хочу большую часть своей бизнес-логики на своем уровне обслуживания, но маршрутизацию, привязку.. все, что пользовательский интерфейс будет заботиться о клиенте.
Я не уверен, что есть правильный или неправильный ответ, но я думаю, что это сообщество, вероятно, может указать мне в правильном направлении.
Я также разместил это в своем блоге на http://www.andyczerwonka.com/picking-a-web-technology-isnt-as-easy-as-it-u-45228