sisioh/scala-dddbase — pull request #4 by mtgto (2013-04-20 14:18:53+00:00)
Title: IdentityとEntityにSerializableを強制するtraitを追加。

## 【やりたいこと】
・Identityを継承した独自のIDクラスも作りたかったのです。
UserエンティティにはIdentity[Long]ではなくてcase class UserId(value: Long): Identity[Long]を使ってあげたくなったのです。

・EntitySerializable（Serializable + IDがSerializableであるtrait）を作りたかったのです。
キャッシュするときにidentifierに@transientつけまくる作業はもうやりたくなかったのです。

そのために、現状のEntityの定義では難しかったので書き直してみましたが、今までのものと比べて直したほうが所があると思うんで、まずはたたき台のつもりでPRしました。

## 【やってみたこと】
一番変えたかったのはEntityの定義です。
https://github.com/mtgto/scala-dddbase/blob/6734f10f610e9c1420fcaf119a95cae56a77b06a/scala-dddbase-core/src/main/scala/org/sisioh/dddbase/core/Entity.scala

既存のEntityの定義は

```scala
trait Entity[ID]
```

ですが、これではEntityのIdentityを継承したIDを渡せないので、

```scala
trait Entity[ID <: Identity[_]]
```

に変更しました。

## 【つかいかた】
使い方としては、

```scala
case class UserId(value: Long) extends Identity[Long] with IdentitySerializable[Long]
case class User(identity: UserId) extends Entity[UserId] with EntitySerializable[UserId]
```

これでUser（とUserId）がSerializableになることをコンパイル時に保証出来ます。
（Id以外のEntityのメンバがSerializableを実装してないとNotSerializableExceptionが発生します）

## 【それ以外】
IdentitySerializable（とそのテスト）とEntitySerializable（とそのテスト）を書きました。