在客户端和服务器之间共享的代码中表示DB实体的惯用方法



假设我有一个带有名称列(String)和年龄列(Int)的RDBMS表persons。如果我们不需要服务器端的ID,则可以完全适合case class Person(name: String, age: String)。问题在于,在某些情况下,我们有ID,例如当我们从DB(后端)中找到人时,但是有时我们没有像以形式创建人(前端)一样。

我看到的三种最简单的方法:

  • 使用转换创建不同的类FrontendPersonBackendPerson。非常样板,没有直接连接
  • 添加包装器DbItem(id: Long, person: Person)
  • 添加id: Option[Long]。也非常样式板,在大多数情况下,我们知道id可用,因此Option#get将传播。

我想知道是否有更好的(可能更通用,无形)或整合到Doobie方式中。

使用默认参数有一个技巧:

case class Person(name: String, age: Int, id: Long = 0L)

因为id列在案例类的末尾存在,并且具有默认值,因此您可以有效地忽略它。例如,您可以创建IT的实例id

这仅在:

时才真正有意义
  • id是数据库中的自动列,因此您永远不必自己管理。

  • Person的实例是从数据库中提取的,因此id字段将被填充用于使用它的任何人。

它解决了您的大多数问题。但是... 1至 @triggernz的链接tpolcat演示的链接,以攻击此攻击的原则方法。

最新更新