Scala 避免创建几乎相同的案例类

Scala 避免创建几乎相同的案例类,scala,playframework,slick,shapeless,Scala,Playframework,Slick,Shapeless,经常遇到这种情况 slick生成的案例类 case class Person(firstname:String,lastname:String) case class Address(zip:String,city:String,state:String) 通常,前端JSON合同包含人员以及地址。传统上需要创建一个类作为 case class PersonWithAddress(firstname:String,lastname:String,address:Address) 这种要求在各方

经常遇到这种情况

slick生成的
案例

case class Person(firstname:String,lastname:String)
case class Address(zip:String,city:String,state:String)
通常,前端JSON合同包含
人员
以及
地址
。传统上需要创建一个类作为

case class PersonWithAddress(firstname:String,lastname:String,address:Address)
这种要求在各方面都很普遍


创建和维护这样的占位符类有点麻烦。任何巧妙的技巧都有助于动态创建这种JSON友好的数据结构。这里有使用Shapeless的理由吗?(注意:正在使用playframework JSON库进行JSON转换)

您可以将JSON案例类定义为
案例类PersonWithAddress(person:person,address:address)
,但是如果您想要平展名字和姓氏,则需要编写自定义序列化程序(而不是将它们嵌套在子文档中)


这可能比简单地重复一个case类要复杂得多,但如果底层case类要更改(复制/粘贴的case类没有这样的功能),至少您会得到一些编译时检查.

对我来说,
PersonWithAddress
就是
Person
,而
Address
字段总是在那里。如果出于某种原因我不总是需要它,那么我就使用
选项[Address]
。这并不完美,但它消除了很多重复。@m-z:在我的情况下不是这样。正如我提到的,我所有的db表和相应的
案例类都是使用光滑的代码生成器生成的。即使它们是手写的,它们仍然是严格的表对象,必须遵守db表定义。你为什么认为case类必须直接映射到数据库表?这对于db架构更改的构建时检查非常有用。例如,架构已更改,案例类映射在构建期间生成,然后在编译依赖项目期间静态检查正确性。您知道避免中断架构更改时出现运行时错误的更好方法吗你在使用播放宏接收吗?