2016-10-19 2 views
0

사용자는 사용자 유형을 가지며 이러한 사용자 유형은 자체 속성 및 사용자 테이블을 참조하는 일부 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를 제외하고 동일한 값을 가진 두 개의 사용자 유형이 실제로 같은 객체이기 때문에 사용자 유형을 엔티티 (일부 ID로 저장해야하기 때문에) 또는 값 객체로해야합니까? UserType을 자체 저장소를 가질 필요가 있으므로

편집

응용 프로그램 관리자는 그 분명, 자신의 사용자 유형을 만들 수 있습니다. 사용자 저장소는 사용자 유형 자체 대신 사용자 유형에 대한 참조 만 가질 수 있지만 사용자 유형을 엔티티 또는 값 객체로 처리 할 수 ​​있는지 여부는 문제입니다.

+1

수정할 수없는 경우 왜 'id'가 있습니까? 그들의 이름은 그들의 이드가 될 수 없는가? 이 경우 그들은 가치임을 분명히 알 수 있습니다. 이 이름을 변경하고 모든 사용자에게 변경 사항을 반영하기를 원하면 'UserType'이 엔티티입니다. – plalx

+0

ID가 ID 대신 PK라고 생각하면 오류가 발생합니다. id를 Whitout하고 PK로 이름을 사용하면, 사용자 유형이 값 객체라는 것을 이해합니다. 필자는이 ID를 PK로 사용했습니다. 주로 모든 테이블의 모든 PK를 숫자 형식으로 쓰는 경향이 있기 때문에이 문서 [link] (http://database-programmer.blogspot.com.es/2008/01/database)를 읽는 경향이 있습니다. -skills-sane-approach-to.html # rule1) 올바른 방법을 배웠습니다. – CapitanCachopo

+1

지속성 관점에서 대리 신원을 갖는 것을 방지하지 못합니다. 이 경우 ID 모델이 인식하지 못하도록 IdentifiedValueObject 계층 상위 유형에서이 ID를 숨 깁니다. – plalx

답변

1

둘 다 생각합니다.

"사용자 관리"의 맥락에서 chaged 할 수없는 userType VO를 사용하여 사용자를 생성하거나 수정합니다. 사용자를 생성하고 cosntructor에서 userType (VO)을 요청하거나 집계/엔티티 기능을 사용하여 사용자 유형을 수정하십시오. 즉 : User.ChangeType (userTypeVO).

예 : "YourSystem Configuration Context"에있는 경우 삭제, 수정 (철자 오류 수정 가능) 또는 새 userTypes 만들기를 위해 참조해야하므로 UserType을 엔터티로 간주해야합니다.

0

귀하의 질문은 비즈니스 도메인보다는 지속성 관련 사항에서 비롯된 것이라고 생각합니다. 이름이 같지만 ID가 다른 두 개의 사용자 유형을 사용하는 데 의미가 있습니까? 대답이 "아니오"이면 분명히 값 객체입니다.