我有一些哲学问题。
我几年来一直是Play Framework for Java的用户。现在我试图深入研究Scala和函数式编程。在基于Java的游戏中我一直在使用Ebean,所以根据Play文档,我扩展了Ebean Model类并实现了我自己的模型。在每个模型中,我声明了一个类型为Finder的静态变量,以便调用查询。所有这些都记录在案并且运作良好。
然而,在基于Scala的Play(v2.5.x)中,没有太多关于持久层的文档。好的,我知道有一个Play Slick的推荐,因为它正在使用函数式编程的想法。我对此感到很兴奋,但几乎没有关于如何使用它的文档。我找到了一种方法,如何启用Slick,如何配置数据源和数据库服务器以及如何将数据库注入到Controller中。关于如何在db上调用简单查询,还有一个很小的例子。
问题是:如何实际使用Slick?我研究了一些第三方教程和博客,似乎有多种方式。
1)如何定义模型?我似乎应该使用案例类来定义模型本身。比我应该定义类扩展表来定义列及其属性??
2)项目结构是什么?我应该为每个模型创建新的scala文件吗?我应该通过Java的约定,但有时我在一个scala文件中看到了所有模型(比如Python Django)。我假设单独的文件更好。
3)我应该为操作模型创建DAO吗?或者我应该创建像服务这样的东西?代码可能非常相似。我要问的是项目的结构。
提前感谢您提出任何想法
答案 0 :(得分:2)
我对浮油有同样的问题,想出了一个适合我的解决方案。看看这个示例项目:
https://github.com/nemoo/play-slick3-example
大多数其他示例项目都太基础了。所以我创建了这个项目的范围更广,类似于我在真实的现场游戏代码中所发现的。我测试了各种方法,包括服务。最后我发现附加层难以使用,因为我从来不知道在哪里放置代码。您可以在过去的提交中看到思考过程:)
让我引用自述文件:存储库处理与域聚合的交互。所有公共方法都作为期货公开。在内部,在某些情况下,我们需要将各种查询组合到一个块中,该块在单个事务中执行。在这种情况下,各个查询返回DBIO查询对象。单个公共方法运行这些查询并向客户端公开Future。
答案 1 :(得分:0)
我可以全心全意地推荐使用入门 part of the Slick documentation
还有一个适用于Slick的Typesafe激活模板 - Hello Slick - 您可以找到here,然后从那里探索并继续
要开始使用Slick和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
然后您必须指定数据库的配置:
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