使用case類Scala中實現我的域模型我如何通過案例類共享行爲斯卡拉
abstract class Entity {
val _id: Option[BSONObjectID]
val version: Option[BSONLong]
}
和幾個case類定義諸如
case class Person (
_id: Option[BSONObjectID],
name: String,
version: Option[BSONLong]
) extends Entity
不同的實體,我需要什麼一種方法來設置_id和版本後來從一個實體上運行的泛型方法,因爲我必須在所有實體上共享這種行爲,並希望避免將其寫下數百次;-)。我希望能夠
def createID(entity: Entity): Entity = {
entity.copy(_id = ..., version = ...)
}
...但當然這不會編譯,因爲一個實體沒有複製方法。它是由編譯器生成的每個單獨的案例類...
什麼是在scala中實現這一點的最佳方法?
爲了防止有人問:我必須使用大小寫類,因爲這是第三方庫從我得到的請求中提取的內容,而case類實例是稍後序列化回BSON/MongoDB的內容。 ...
[爲所有支持copy(id = newId)方法的案例類創建常見特徵的可能重複(http://stackoverflow.com/questions/15078102/create-common-trait-for-all- case-classes-supporting-copyid-newid-method) – 2013-03-09 20:14:13
爲什麼不把_id和版本位分開?你將會有一個案例類'Entity [T](_ id:...,version:...,data:T)'。 'T'可能是另一個具有適當數據的案例類。 – 2013-03-09 22:37:05
對不起,但正如我所提到的案例類實例(包括id和版本)是由第三方庫創建的,因此這裏不是一個選項。 – jens 2013-03-09 23:17:28