ユーザはユーザタイプを持ち、これらのユーザタイプは、独自の属性とユーザテーブルを参照するいくつかのIDを持つデータベースに格納されます。DDD:ユーザータイプを値オブジェクトまたはエンティティにする必要がありますか?
case class User(id: Int, userType: Int, firstName: String, lastName: String)
case class UserType(id: Int, name: String)
また、私は集約オブジェクトを持っています。
case class User(userData: User, userType: UserType)
アプリケーションマネージャは、独自のユーザータイプを作成し、それらを異なるアプリケーションユーザーに割り当てることができます。
追加情報:これらのユーザータイプは作成後は変更できませんが、一部の検証をパスした後に削除することができます。
IDを持つ以外の同じ値を持つ2つのユーザータイプが実際に同じオブジェクトなので、ユーザータイプをエンティティ(あるIDで格納する必要があるため)または値オブジェクトにする必要がありますか? UserTypeは明らかだ独自のリポジトリを、持っている必要がありますので、
EDIT
アプリケーションマネージャは、独自のユーザー・タイプを作成することができます。ユーザーリポジトリは、ユーザータイプ自体を持つ代わりにユーザータイプの参照のみを持つことができますが、ユーザータイプをエンティティまたは値オブジェクトとして扱うことができるかどうかは疑問です。
変更できない場合、なぜ「id」を持っていますか?彼らの名前は彼らの「id」にできないのですか?その場合、それらが価値であることは明らかです。これらの名前を変更し、その変更をすべてのユーザーに反映させたい場合は、 'UserType'がエンティティです。 – plalx
IDはIDの代わりにPKだと思っていたのです。あなたが言ったように、idをWhitoutしてPKとして名前を使用すると、ユーザータイプが値オブジェクトであることがわかります。私はこのIDをPKとして主に使用しました。なぜなら、私はすべてのテーブルのすべてのPKを数値型で書く傾向があり、このドキュメント[リンク](http://database-programmer.blogspot.com.es/2008/01/database -skills-sane-approach-to.html#rule1)正しい方法を学びました。 – CapitanCachopo
永続性パースペクティブから代理IDを取得することはできません。その場合、ドメインモデルがそれを認識しないように、このIDをIdentifiedValueObjectレイヤのスーパータイプに非表示にします。 – plalx