用 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。
例如,在 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。