2

我有一个哲学问题。

几年来,我一直是 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 来操作模型吗?或者我应该创建类似服务的东西吗?代码可能非常相同。我要问的是项目的结构。

提前感谢您的任何想法

4

2 回答 2

2

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

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

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

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

于 2016-04-15T17:10:47.773 回答
1

我可以全心全意地推荐 Slick 文档的入门 部分

还有一个 Slick 的 Typesafe Activator Template - 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

于 2016-04-14T08:07:52.380 回答