gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 19:52:46 26 4
gpt4 key购买 nike

假设我有一个 RDBMS 表 persons,其中包含名称列 (String) 和年龄列 (Int)。如果我们在服务器端不需要 id,这可以完全适合 case class Person(name: String, age: String)。问题是在某些情况下我们有 id,比如当我们从 DB(后端)获取 person 时,但有时我们没有,比如当我们在表单(前端)中创建 person 时。

我看到的三种最简单的可能方式:

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

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

最佳答案

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

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

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

只有在以下情况下才真正有意义:

  • id 是数据库中的一个 autoinc 列,因此您永远不必自己管理它。

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

    <

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

关于database - 在客户端和服务器之间共享的代码中表示 DB 实体的惯用方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42472094/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com