我有一个哲学问题。
几年来,我一直是 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/