scala - Play Framework 2.5.x Scala Slick 实现风格

标签 scala slick playframework-2.5

我有一个哲学问题。

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

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

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

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

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

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

提前感谢您的任何想法

最佳答案

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

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

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

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

关于scala - Play Framework 2.5.x Scala Slick 实现风格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36616810/

相关文章:

scala - foldRight 过滤的 HList 不提供实例

postgresql - 数据库演变在 Play 框架中不起作用,我收到以下异常

java - 在 Play Framework 2.5.X (Java) 中安排异步任务

mongodb - 在scala中将dataframe转换为json

scala - 将稀疏特征向量分解为单独的列

postgresql - 斯卡拉和玩! & Slick & PostgreSQL 自增

java - 如何将静态变量调用到非静态方法,即我需要调用 maxId 变量来插入方法

scala - 如何使用 Play 2.5 在分块响应中将 Anorm 大型查询结果流式传输到客户端

scala - Scala类正文中的右箭头

scala - autoInc 与 Postgres 和 Slick