在Scala上使用Slick(使用Play Framework 2.3)

时间:2014-10-14 04:25:44

标签: database scala design-patterns playframework slick

从设计的角度来看,对于中等规模的应用来说,它是否正常?#34;在业务逻辑层中使用表对象?当我说好的时候,我的意思是,这不是一种不好的做法。

有很多软件模式,例如存储库模式,活动记录模式等。我只是不确定它们是否适合Scala之类的语言。

2 个答案:

答案 0 :(得分:1)

根据我的口味,它甚至比存储库或活动记录模式更好。 有了活动记录,您必须将magic添加到对象本身,难以解耦不是非常透明。使用存储库模式,您最终将拥有许多小型存储库,对于每个非常愚蠢的实体而言,它们的所有功能都是将调用包装到数据库中 以解耦的方式,主要是为了能够在模拟或内存中进行测试。

但是当您在服务层(或业务逻辑层,如果您愿意)中使用表查询时,您不会牺牲可测试性(或虱子耦合)。数据库功能本身在scala.slick.driver.JdbcProfile中被抽象化,因此您不需要进行另一次抽象来将其分解出来。

当然,最好将在表定义附近多次使用的所有查询分组并将它们导入到您的服务中,但这不完全是一个存储库,只是一堆可组合的查询。

希望这有帮助。

答案 1 :(得分:0)

如果您决定将Slick TableTableQuery对象直接用于您的业务/服务层,那么这是一种合法模式。无论如何,Slick抽象出低级别的db代码。使用Slick API与使用常规Scala API看起来并没有什么不同,因此在使用Slick时不应该使用记录,存储库或任何其他传统模式。

撰写Queries时,我觉得使用Query扩展隐式类很有用。您可以找到有关此样式的一些详细信息herehere