【问题标题】:Play Framework 2.5.x Scala Slick implementation stylePlay Framework 2.5.x Scala Slick 实现风格
【发布时间】:2016-08-05 15:15:39
【问题描述】:

我有一个哲学问题。

几年来,我一直是 Play Framework for Java 的一个非常满意的用户。现在我正在尝试深入研究 Scala 和函数式编程。在基于 Java 的游戏中,我一直在使用 Ebean,因此根据 Play 文档,我扩展了 Ebean 模型类并实现了自己的模型。在每个模型中,我声明了一个 Finder 类型的静态变量,以便调用查询。所有这些都已记录在案并且运行良好。

然而,在基于 Scala 的 Play (v2.5.x) 中,没有太多关于持久层的文档。好的,我知道 Play Slick 有一个推荐,因为它使用了函数式编程的思想。我对此有点兴奋,但几乎没有关于如何使用它的文档。我找到了如何启用 Slick、如何配置数据源和数据库服务器以及如何将数据库注入控制器的方法。还有一个非常小的例子,关于如何在 db 上调用简单查询。

问题是:如何实际使用 Slick?我研究了一些第三方教程和博客,似乎有多种方法。

1) 如何定义模型?看来我应该使用案例类来定义模型本身。比我应该定义类扩展表来定义列及其属性吗??

2) 项目结构是什么?我应该为每个模型创建新的 scala 文件吗?按照 Java 的约定,我应该这样做,但有时我会在一个 scala 文件中看到所有模型(比如在 Python Django 中)。我认为单独的文件更好。

3) 我应该创建 DAO 来操作模型吗?或者我应该创建类似服务的东西吗?代码可能非常相同。我要问的是项目的结构。

提前感谢您的任何想法

【问题讨论】:

    标签: scala slick playframework-2.5


    【解决方案1】:

    我对 slick 也有同样的疑问,并想出了一个适合我的解决方案。看看这个示例项目:

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

    大多数其他示例项目都太基础了。所以我创建了这个范围更广的项目,类似于我在真实的现场播放代码中发现的。我测试了各种方法,包括服务。最后,我发现附加层很难使用,因为我不知道将代码放在哪里。你可以看到过去提交的思考过程:)

    让我引用自述文件:存储库处理与域聚合的交互。所有公共方法都公开为期货。在内部,在某些情况下,我们需要将各种查询组合到一个块中,并在单个事务中执行。在这种情况下,各个查询返回 DBIO 查询对象。单个公共方法运行这些查询并向客户端公开 Future。

    【讨论】:

    • 谢谢,我觉得很好,因为您采用了基于 Java 的 Play with Ebean 的原始概念。您的模型将模型定义和 DAO/服务合二为一。
    【解决方案2】:

    我可以全力推荐入门part of the Slick documentation

    还有一个用于 Slick 的 Typesafe Activator Template - Hello Slick - 您可以找到 here 然后探索并从那里继续

    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"
      

    如果您想对这一切以及更多内容有一个很好的了解,您绝对应该看看 THE BEST STARTING POINT - 一个包含模型、DAO、控制器的完整项目,适用于 Play 2.5.x

    【讨论】:

    • play2.5 的 play-slick/evolutions 错误。我不认为你在回答他的问题。尽管我认为这个问题应该因为primarily opinion-based 而被关闭
    • 我更正了版本。我同意这个问题本身有点宽泛,但我仍然认为这是一个有效的问题。您可以随意提供替代答案,我打算更新我的
    • 谢谢,我在发布这个问题后立即发现了整个 Slick 文档。在那之前,我还在谷歌上搜索 Play 示例,错过了最初的 Slick 网站。不过也有一些有价值的例子和解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    • 2016-09-30
    • 2016-11-17
    • 1970-01-01
    • 2017-07-02
    相关资源
    最近更新 更多