播放框架2.5.x Scala Slick实现风格



我有一个哲学问题。

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

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

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

1) 如何定义模型?我似乎应该使用case类来定义模型本身。那么我应该定义类扩展表来定义列及其属性吗??

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

3) 我应该创建用于操纵模型的DAO吗?或者我应该创建类似Service的东西吗?代码可能非常相同。我要问的是这个项目的结构。

提前感谢您的任何想法

我对slick也有同样的问题,并提出了一个适合我的解决方案

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

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

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

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

还有一个用于Slick的Typesafe激活器模板-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

最新更新