Стиль реализации Play Framework 2.5.x Scala Slick

У меня какой-то философский вопрос.

Я был очень счастливым пользователем Play Framework для Java в течение нескольких лет. Сейчас я пытаюсь погрузиться в Scala и функциональное программирование. В игре на основе Java я использовал Ebean, поэтому, согласно документации Play, я расширил класс модели Ebean и реализовал свои собственные модели. В каждой модели я объявил статическую переменную типа Finder для вызова запросов. Все это задокументировано и хорошо работает.

Однако в Play на основе Scala (v2.5.x) не так много документации об уровне сохраняемости. Хорошо, я понял, что есть рекомендация Play Slick, поскольку она использует идеи функционального программирования. Я немного взволнован этим, но почти нет документации о том, как его использовать. Я нашел способ, как включить Slick, как настроить источник данных и сервер базы данных и как внедрить базу данных в контроллер. Также есть очень небольшой пример того, как вызвать простой запрос к базе данных.

Вопрос в том, как на самом деле использовать Slick? Я исследовал некоторые сторонние учебные пособия и блоги, и кажется, что есть несколько способов.

1) Как определить модели? Кажется, я должен использовать классы case для определения самой модели. Чем я должен определить класс, расширяющий таблицу, чтобы определить столбцы и их свойства??

2) Какова структура проекта? Должен ли я создавать новый файл scala для каждой модели? По соглашению Java я должен, но иногда я видел все модели в одном файле scala (например, в Python Django). Я предполагаю, что отдельные файлы лучше.

3) Должен ли я создавать DAO для управления моделями? Или я должен создать что-то вроде Сервиса? Код, вероятно, будет таким же. Я спрашиваю о структуре проекта.

Заранее спасибо за любые идеи


person spidla    schedule 14.04.2016    source источник


Ответы (2)


У меня были те же вопросы о slick, и я нашел решение, которое работает для меня. Взгляните на этот пример проекта:

https://github.com/nemoo/play-slick3-example

Большинство других примеров проектов слишком просты. Поэтому я создал этот проект с более широким охватом, похожим на то, что я нашел в коде реальной живой игры. Пробовал разные подходы, в том числе сервисы. В конце концов, мне было трудно работать с дополнительным слоем, потому что я никогда не знал, куда поместить код. Вы можете увидеть мыслительный процесс в прошлых коммитах :)

Позвольте мне процитировать из файла readme: репозитории управляют взаимодействием с доменными агрегатами. Все общедоступные методы выставляются как фьючерсы. Внутренне в некоторых случаях нам нужно составить различные запросы в один блок, который выполняется в рамках одной транзакции. В этом случае отдельные запросы возвращают объекты запросов DBIO. Один общедоступный метод выполняет эти запросы и предоставляет клиенту Future.

person nemoo    schedule 15.04.2016
comment
Спасибо, мне кажется, это приятно, потому что вы приняли оригинальную концепцию Play на основе Java с Ebean. Ваши модели включают в себя определение модели и DAO/службу в одном компоненте. - person spidla; 16.04.2016

Я могу искренне порекомендовать Начало работы часть документации Slick.

Существует также шаблон активатора Typesafe для Slick — Hello Slick, который вы можете найти здесь а затем исследуйте и продолжайте оттуда

  1. Чтобы начать работу со Slick and Play, вам нужно добавить зависимость в файл build.sbt:

    "com.typesafe.play" %% "play-slick" % "2.0.0"
    

    Также эволюции (которые я рекомендую)

    "com.typesafe.play" %% "play-slick-evolutions" % "2.0.0"
    

    И, конечно же, драйвер для базы данных.

    "com.h2database" % "h2" % "${H2_VERSION}" // replace `${H2_VERSION}` with an actual version number
    
  2. Затем вам нужно будет указать конфигурацию для вашей базы данных:

    slick.dbs.default.driver="slick.driver.H2Driver$"
    slick.dbs.default.db.driver="org.h2.Driver"
    slick.dbs.default.db.url="jdbc:h2:mem:play"
    

Если вы хотите получить хороший обзор всего этого и многого другого, вам обязательно следует взглянуть на ЛУЧШАЯ НАЧАЛЬНАЯ ТОЧКА – полный проект с моделями, DAO и контроллерами, адаптированный для Play 2.5.x.

person Anton    schedule 14.04.2016
comment
Неправильный игровой слик/эволюция для игры 2.5. и я не думаю, что вы отвечаете на то, что он спрашивает. хотя я полагаю, что вопрос все равно должен быть закрыт из-за primarily opinion-based - person suish; 14.04.2016
comment
Я поправил версии. Я согласен, что сам вопрос немного широк, но я все же думаю, что он правильный. Вы можете предоставить альтернативный ответ, я планирую обновить свой - person Anton; 14.04.2016
comment
Спасибо, я обнаружил всю документацию Slick сразу после того, как опубликовал этот вопрос. До этого я все еще гуглил примеры Play и пропустил оригинальный сайт Slick. Однако есть несколько ценных примеров и пояснений. - person spidla; 16.04.2016