LINUX.ORG.RU

Play Framework 2.4 «Damiya»

 , , ,


0

3

Вышла новая версия Play Framework — фреймворка для построения веб-приложений на Scala и Java.

Основное изменение этой версии — поддержка dependency injection (DI). В прошлых версия Play многие компоненты были реализованы в виде глобальных синглтонов, DI поддерживался только для пользовательского кода и добавлялся сторонними плагинами. В этой версии для управления зависимостями был выбран Google Guice, а компоненты Play теперь стали доступны через него. Также была сохранена возможность смены реализации DI, в том числе возможна реализация статического связывания компонентов без использования сторонних фреймворков.

Добавление DI существенно облегчает написание тестов и должно помочь в написании приложений, состоящих из отдельно разрабатываемых модулей.

Также в этой версии:

  • URL routing теперь можно задавать не только в конфигурационном файле, но и с использованием Routing DSL. Предполагается, что такой способ будет более удобен для написания REST-сервисов.
  • Переход на Java 8, который позволил существенно упростить Java API. Также добавлена поддержка новых типов дат в Play JSON.
  • Опциональная возможность использования стандартной для sbt схемы размещения исходных файлов проекта вместо принятой в Play.
  • Продолжена модуляризация компонентов Play: API для работы с базами данных, Anorm и Ebean, были вынесены в отдельные компоненты.
  • Поддержка TLS SNI в http-клиенте WS.
  • Экспериментальная реализация HTTP-backend'а на базе akka-http и реализация Reactive Streams API для работы с HTTP-потоками.

Для пользователей Play 2.3 подготовлено руководство по переходу на 2.4.

Релиз назван “Damiya” в память о Kate von Roeder.

>>> Подробности

★★★★★

Последнее исправление: maxcom (всего исправлений: 9)

Продолжена модуляризация компонентов Play: API для работы с базами данных, Anorm и Ebean, были вынесены в отдельные компоненты.

Вот это отлично.

Debasher ★★★★★
()

Конца и края нет одним и тем же web-фрэймворкам, делающим одно и тоже. :-)

anonymous
()
Ответ на: комментарий от anonymous

Этот довольно таки другой. Взять хотя бы его асинхронность. Много ты знаешь фреймворков аля rails с поддержкой асинхронности? Кроме того этот фреймворк типобезопасный.

dizza ★★★★★
()
Ответ на: комментарий от dizza

Какая асинхронность ещё? Такая, как в node.js (аля libev/libuv/libevent)? И что та типобезопасность даёт при web-разработке, кроме как создаёт баррикады на ровном месте?

anonymous
()
Ответ на: комментарий от dizza

Когда я последний раз его смотрел (2013 год) асинхронность там была реализована через одно место. Например, нормальный стриминг через неё не делался. В результате ушел на spray.

Reset ★★★★★
()
Ответ на: комментарий от dizza

Да.

Да?

Прошу поправить меня безграмотного, но вроде как в вышеупомянутых асинхронность достигается через io-event-loop? А в плее, как я понимаю, обёрточки для тредпулов джавовских

Debasher ★★★★★
()
Последнее исправление: Debasher (всего исправлений: 2)
Ответ на: комментарий от dizza

Брехня

Брехня? А что ты под типовой безопасностью понимаешь? Я под этим понимаю объектно-ориентированный подход, когда на каждый чих создаётся тип, чтобы, типа компилятор /идиотские/ ошибки нашёл. И ты утверждаешь, что задействовав аппарат типов на стороне HTTP-сервера, создавая целую толстую прослойку из типов, которую надо сначала придумать, изучив предметную область досконально, а затем переделывать и сопровождать ты не создаёшь себе проблем на ровном месте? :-)

anonymous
()
Ответ на: комментарий от anonymous

ты не создаёшь себе проблем на ровном месте? :-)

Тут очевидно необходимо рассказать про подход, по сравнению с которым это - куча проблем.

RedPossum ★★★★★
()
Ответ на: комментарий от Debasher

В качестве сервера в плее асинхронный Netty, а у него в кишках ioloop.

dizza ★★★★★
()
Ответ на: комментарий от anonymous

Я под этим понимаю объектно-ориентированный подход,

У тебя каша в голове, иди покажи в haskell в его тьме типов обьектную ориентированность.

которую надо сначала придумать, изучив предметную область досконально,

Изучить предметную область и придумать типы нужно независимо от языка. Только в случае плея эти типы существют явным образом, а не подразумеваются. Если ты думаешь, что можно не продумывать типы, у меня для тебя плохие новости.

dizza ★★★★★
()
Последнее исправление: dizza (всего исправлений: 2)
Ответ на: комментарий от anonymous

ты не создаёшь себе проблем на ровном месте?

А тесты и пользователи тебе случайно проблемы на ровном месте не создают?

maxcom ★★★★★
() автор топика
Ответ на: комментарий от dizza

Transfer-Encoding: chunked как на прием так и на отдачу с почанковой обработкой, при этом сама обработка предполагала обращение к сетевому сервису со всеми вытекающими последствиями.

Reset ★★★★★
()
Ответ на: комментарий от maxcom

Не знаю как сейчас, а раньше это делалось с помощью запутанных и стремных концепций типа Iteratee, которые внутри были блокирующими. Акторы проще как для программирования так и для понимания и гибче.

Reset ★★★★★
()
Ответ на: комментарий от dizza

У тебя каша в голове, иди покажи в haskell в его тьме типов обьектную ориентированность.

По-моему, каша в голове не у меня :-) Типизация - это один из способов абстракции путём определения операций над той определённой категорией данных, в которую попадают допустимые значения, т.е. объекты определённых типов. Я не прав? Давай я угадаю, какие типы ты имеешь в виду - Person, Account, Transaction, User, City, Country и т.п. Или я не прав? :-)

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

Ничего не понял. А где они лишь подразумеваются, а не существуют явным образом?

Если ты думаешь, что можно не продумывать типы, у меня для тебя плохие новости.

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

anonymous
()
Ответ на: комментарий от maxcom

А тесты и пользователи тебе случайно проблемы на ровном месте не создают?

Смотря какие тесты и смотря какие пользователи :-)

anonymous
()
Ответ на: комментарий от Reset

Не знаю как сейчас, а раньше это делалось с помощью запутанных и стремных концепций типа Iteratee, которые внутри были блокирующими.

Iteratee/Enumeratee запутанная штука, но асинхронная сама по себе.

maxcom ★★★★★
() автор топика
Ответ на: комментарий от Reset

которые внутри были блокирующими

Это если ты из синхронного InputStream генеришь Enumerator, то появляется элемент блокировки на i/o внутри этого самого InputStream'а. В остальном там всё асинхронное.

Акторы проще как для программирования так и для понимания и гибче.

Да вроде вещи-то ортогональные.

shahid ★★★★★
()
Последнее исправление: shahid (всего исправлений: 1)
Ответ на: комментарий от anonymous

Чувак, просто зайди на википедию и последователь посмотри термины обьектно-ориентированный, тип данных, типобезопасность. А то ты какой-то поток сознания пишешь.

dizza ★★★★★
()
Ответ на: комментарий от anonymous

Типизация - это один из способов абстракции путём определения операций над той определённой категорией данных...

«Типы — это такая абстракция, которая является антиабстракцией...»

А типовая безопасность подразумевает лишь усложнение.

В случае scala усложнения никакого не наблюдается.

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

shahid ★★★★★
()
Ответ на: комментарий от dizza

Чувак, просто зайди на википедию и последователь посмотри термины

Ну зашёл, ну смотрю термины:

обьектно-ориентированный

«в современных объектно-ориентированных языках программирования каждый объект является значением, относящимся к определённому классу. Класс представляет собой объявленный программистом составной тип данных»

тип данных

«Тип данных — класс данных, характеризуемый членами класса и операциями, которые могут быть к ним применены»

типобезопасность

«Система типов называется безопасной или надежной, если в программах, прошедших проверку согласования типов, исключена возможность возникновения ошибок согласования типов во время выполнения»

А то ты какой-то поток сознания пишешь.

Ну я пишу то, что знаю, и, википедиа ещё раз подтверждает то, что я писал :-)

anonymous
()
Ответ на: комментарий от shahid

«Типы — это такая абстракция, которая является антиабстракцией...»

Я такое в первый раз слышу :-)

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

Как напишешь и внедриш хоть один крупный web-проект на какой-нибудь типобезопасной Аде (фрейворки даже есть), то приходи, расскажешь историю успеха как ты удовлетворял компилятор :-)

anonymous
()
Ответ на: комментарий от anonymous

А типовая безопасность подразумевает лишь усложнение.

Сторонник динамического петушения что ли? Иди давай, кукарекай где-нибудь в другом месте.

anonymous
()
Ответ на: комментарий от anonymous

расскажешь историю успеха как ты удовлетворял компилятор

$ sbt console
> val s = "hello world: "
> val c = 123
> println(s + c)
hello world: 123


Компилятор удовлетворён.

shahid ★★★★★
()
Ответ на: комментарий от anonymous

Сторонник динамического петушения что ли? Иди давай, кукарекай где-нибудь в другом месте.

Сторонник статического петушения что ли? :-) Петушись молча :-)

anonymous
()
Ответ на: комментарий от shahid

Компилятор удовлетворён.

Я просил на Аде, а то я так тоже могу удовлетворять:

$ node
> var s = "string";
undefined
> var n = 123;
undefined
> console.log(s + n);
string123
undefined
anonymous
()
Ответ на: комментарий от anonymous

$ node
типобезопасной

Всё, сдаюсь, ты подебил.

shahid ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.