例如,在Web服务的范围内,案例类用于存储和返回REST API中的数据。
有时对于不同的端点,需要类似的类略有差异(例如,只有一个字段不同。)
例如:
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)
想问一下,sollution为每个返回类型创建新的case类是最好的,还是有更好的一个,因为出现了很多类似的代码/类。
答案 0 :(得分:1)
这实际上取决于你将如何使用这些案例类。从您的示例中,您可以采用的一种方法是将这些可选字段声明为Option。
case class Example(id: Int, value: Int, name: Option[String], createdOn: Option[LocalDate])
答案 1 :(得分:1)
有几种选择:
1)Copypaste
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。