2017-02-26 100 views
3

比方说,我有一个名称列(String)和年龄列(Int)的RDBMS表persons。如果我们不需要服务器端的ID,这可以完全适合case class Person(name: String, age: String)。问题在于,在某些情况下,我们拥有id,就像我们从DB(后端)获取人员时那样,但有时我们没有,就像我们在form(前端)创建人员时一样。在客户端和服务器之间共享的代码中表示DB实体的习惯方式

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

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

我想知道是否有更好的(可能更通用,没有形状)或集成到doobie的方式。

+1

有一个视频在scala中讨论了这个确切的问题:https://www.youtube.com/watch?v = 7xSfLPD6tiQ – triggerNZ

回答

0

有使用默认参数一招:

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

因为id列有在案件类的末尾,有一个默认值,可以有效地忽略它。例如,您可以创建它的实例,其中省略了id

这才真正有意义,如果:

  • id是数据库中的AUTOINC列,所以你从来没有管理它自己。的Person

  • 实例从数据库中抽取,所以id领域将被填充任何人谁在乎使用它。

它解决了您的大部分问题。但是...... +1 to @ triggerNZ链接到tpolcat演示文稿,以一种有原则的方式来攻击它。

相关问题