나는 이것이 주관적이며 당신의 디자인에 달려 있다고 생각합니다.
대부분이 디자인은 활성 레코드 에서 나온 것으로 보입니다 . 활성 레코드에는 엔터티에 데이터베이스 작업을 수행하는 메서드가 있으므로 해당 데이터베이스 식별자도 알아야합니다.
객체에이 데이터를 저장 하는 데이터 매퍼가 있는 리포지토리 와 같은 다른 패턴을 사용 하는 경우 불필요하고 부적절해질 수 있습니다.
예를 들어 Person
물체를 생각해보십시오 . 가족 내에서 고유하거나 고유하지 않은 이름이 부여됩니다. 인구가 증가함에 따라 더 큰 이름은 더 이상 고유하지 않으므로 점점 더 큰 시스템에 대한 대리 식별자를 생각해 냈습니다. 예 : 운전 면허증, 주민등록번호. 본인은 아이디를 부여받지 않고 태어 났으며,이 아이디는 모두 신청해야합니다.
이들 중 대부분은 보편적이지 않기 때문에 소프트웨어에 적합한 기본 키 / ID를 만들지 않습니다. 적어도 특정 시스템 외부가 아닌 SSN은 사회 보장국에 독특하고 일관성이 있습니다. 우리는 일반적으로이 정보를 제공하는 사람이 아니기 때문에 정보를 제공하는 id
것이 아니라 그들이 나타내는 데이터를 예로들 것 SSN
입니다. 때로는 DriversLicense
운전 면허증이하는 모든 정보를 포함 할 수있는 완전한 구성 객체를 포함하기도합니다 .
따라서 모든 일반 ID는 시스템의 대리 키이므로 메모리 참조에서 대체 할 수 있으며 레코드 만 더 쉽게 찾고 유지하기 위해 id 만 포함 할 수 있습니다.
id
는 개념적 데이터의 조각이 아니기 때문에 도메인에서 나오지 않기 때문에 (일반적으로) 객체 내에 속한다고 의심합니다. 오히려 고유 한 아이덴티티를 나타내는 다른 방법이없는 객체를 식별하는 것이 목적으로 유지되어야합니다. 이것은 저장소 / 수집에서 쉽게 할 수 있습니다.
소프트웨어에서 객체를 목록으로 나타내거나 유지해야하는 경우 리포지토리 / 수집 객체 또는 이와 연관된 다른 객체에서 간단히 수행 할 수 있습니다. 데이터 매퍼로 전달할 때 (별도 인 경우) 간단히 전달할 수 있습니다 .update( id, obj )
.
면책 조항 : 나는 엔터티 내에 ID를 포함하지 않는 시스템을 아직 구축하려고 시도하지 않았으므로 자신을 잘못 증명할 수 있습니다.