このエントリは ドメイン駆動設計 #1 Advent Calendar 2018 の5日目です。 4日目は @s_edward さんの「Microservices と DDD」でした。 6日目は @kawakawa さんの ドメインオブジェクトとユースケースの関係について です。 TL;DR エンティティの同一性を表現するためにequalsをオーバーライドすべき ではない と考えています。 稀によくあるサンプル 次のような実装を目にすることがあります。以降のコードは Scala 2.12.7 で動作確認しています。 ※私が書きやすいのでScalaを用いていますが、他言語においても同様のことは言えるかと思います。 trait Identifier trait Entity[ID <: Identifier] { def identifier: ID def canEqual(that: An