用 Scala 案例表示数据的最佳做法是什么 类

What is best practice to represent data by Scala case classes

例如,在 Web 服务范围内,案例 classes 用于存储和 returning 来自 REST API 的数据。

有时对于不同的端点,需要类似的 classes,但略有不同(例如只有一个字段不同。)

例如:

case class Example (id: Int, value:Int)
case class ExampleWithName (id: Int, value:Int, name:String)
case class ExampleWithNameAndDate (id: Int, value:Int, name:String,createdOn:LocalDate)

想问一下,每个return类型新建caseclass的解决方案是最好的,或者有更好的,因为出现了很多类似的code/classes .

这实际上取决于您将如何使用这些案例类。在您的示例中,一种方法是将这些可选字段声明为 Option。

case class Example(id: Int, value: Int, name: Option[String], createdOn: Option[LocalDate])

有几种选择:

1) 复制粘贴

case class Example (id: Int, value:Int)
case class ExampleWithName (id: Int, value:Int, name:String)

优点和缺点:我们都知道:)

2) 可选值

case class ExampleWithName (id: Int, value:Int, name: Option[String])

优点:没有重复

缺点:如果在特定用例中您希望出现该名称,则不会在编译时检查它。如果你不需要这个名字,你仍然有多余的嘈杂场。

3) 聚合

case class Example (id: Int, value:Int)
case class ExampleWithName (example: Example, name:String)

优点:没有以前方法的缺陷

缺点:可能需要额外的努力才能将此嵌套结构编排成平面 json。