我在写一个HTTP REST API,我想在Scala中强类型化模型类,例如如果我有一个汽车模型Car
,我想创建以下REST风格/car
API:部分模型的斯卡拉成语?
1)POST
S(创建一个新的车):
case class Car(manufacturer: String,
name: String,
year: Int)
2)对于PUT
S(编辑现有汽车)和GET
S,我想沿着id
标签太:
case class Car(id: Long,
manufacturer: String,
name: String,
year: Int)
3)PATCH
ES(部分编辑现有的汽车),我想这部分对象:
case class Car(id: Long,
manufacturer: Option[String],
name: Option[String],
year: Option[Int])
但保持3个模型本质上是相同的事情是多余的和容易出错的(例如,如果我编辑一个模型,我必须记住编辑其他模型)。
是否有类型安全的方法来维护所有3个模型?我也可以用使用宏的答案。
我还是设法前两个那些如下
trait Id {
val id: Long
}
type PersistedCar = Car with Id
只是评论是什么感觉就像一个代码/设计的味道。你的实体是汽车 - 带ID,这就是你的领域模型应该包含的内容,这就是应该坚持的东西。您的REST请求CRU [D]模型瞬态操作 - 创建汽车,更新汽车,获取汽车,并且您应该有一个对象模型,以清楚它们是否是请求。 – 2014-10-20 12:33:46
@Paul:即使我为所有这些创建了单独的模型,并且说我有一个域模型“Car.scala”和一个对象模型“CreateCarRequest.scala”,许多字段会一遍又一遍地重复。 – pathikrit 2014-10-29 00:25:57