これは主観的なものであり、デザインに依存すると思います。
ほとんどこれはアクティブなレコードから来ているデザインのように見えますが。アクティブなレコードでは、エンティティにデータベース操作を実行するメソッドがあるため、データベース識別子も知っている必要があります。
オブジェクトにこのデータを保存するデータマッパーでリポジトリなどの他のパターンを使用すると、不必要になり、おそらく不適切になります。
たとえば、Person
オブジェクトを取ります。家族内で一意である場合とそうでない場合があります。人口が増加するにつれて、より大きな名前は一意ではなくなり、ますます大規模なシステムのサロゲート識別子を見つけました。これらの例には、私の運転免許証、および社会保障番号が含まれます。私は生まれながらにIDを割り当てられていません。これらのIDはすべて申請する必要があります。
これらのほとんどは、普遍的ではないため、ソフトウェアの適切な主キー/ IDを作成しません。少なくとも特定のシステムの外側ではなく、明らかに社会保障局にとってSSNは一意であり、一貫性があります。私たちは一般にこの情報の提供者ではないので、あなたはそれらを提供するのid
ではなく、それらが表すデータ、例えばを呼ぶでしょうSSN
。場合によっては、DriversLicense
運転免許証が行うすべての情報を含む可能性のある完全な合成オブジェクトを含むこともあります。
したがって、すべての一般IDはシステム内の代理キーであり、メモリ参照で置き換えることができ、IDのみを含むことで、レコードの検索と永続化を容易にします。
an id
は概念的なデータの一部ではないため、ドメインから取得したものではないため、(一般的に)オブジェクト内に属しているとは思えません。むしろ、一意のアイデンティティを表す他の方法を持たないオブジェクトを識別するという目的に保持する必要があります。これは、リポジトリ/コレクションで簡単に実行できます。
ソフトウェアでは、オブジェクトをリストとして表現したり、永続化したりする必要がある場合は、リポジトリ/コレクションオブジェクト、またはそれに関連付けられた他のオブジェクトから簡単に表現できます。データマッパーに渡す場合(別個の場合)、単に渡すことができます.update( id, obj )
。
免責事項:私はまだエンティティ内にIDを含まないシステムを構築しようとしていないので、自分自身が間違っていることを証明するかもしれません。