我在寫一個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