2016-12-11 1 views
1

나는 상태가DDD : 상태 - 값 개체 또는 엔터티?

public final class Status { 

     private int code; 

     public Status(int code) { 
      this.code = code; 
     } 

     public int getCode() { 
      return code; 
     } 
    } 

동일한 코드를 가진 두 개의 상태가 동일한 상태이기 때문에 상태가 값 객체가 될 수 있지만, 상태가 상태의 목록은 사용자 인터페이스에 표시한다, 관리자로 추가 할 수있는 것 같습니다있다;

는 사용자 인터페이스에서 자신의 이름을 가진 상태의 목록을 제공하기 위해, 나는

public final class AvailableStatuses { 
    private Status status; 
    private String name; 

    ... 
} 

public AvailableStatusesRepository { 
    ... 
} 

당신이 디자인에 대해 어떻게 생각하십니까 추가 래퍼 클래스가? 그것을 조정하고 엔터티로 Status를 만들고 Name 필드를 넣어야합니까?

+0

(합성 ID 키 엔티티에 대한 특별한 요구 사항은 아닙니다)를 한 번에 할당 된 ID는 변경할 수 없습니다 있다는 경고와 함께, 엔티티로 취급 할 수있다 나는 당신의 통화 클래스를 이해하지 못합니다. 예 : 통화 124 란 무엇입니까? 아니면 코드 값은 ISO 코드입니까? 124는 캐나다 달러 ('CAD')입니까? 그렇다면 왜 'Currency'와'AvailableCurrency'를 분리해야합니까? UI를 통해 유지 보수가 가능한 내부 ID, ISO 번호, ISO 코드 및 설명이있는 엔티티'통화 '만있는 것이 아닌가? – Andreas

+0

코드는 통화 (1 - USD, 2 - EUR 등)의 내부 표현입니다.이 경우 AvailableCurrency 래퍼를 사용합니다. – Teimuraz

+0

@Andreas, 나는 통화 대신 약간의 질문을 변경했다. 나는 개념을 상태로 바꿨다. 내 혼란이 더 분명하게 반영 될 것이라고 생각한다. – Teimuraz

답변

0

값 개체는 모델의 요소에 대한 설명자로 사용되므로 값 개체 여야합니다. 그것들은 그것들의 속성에 의해 정의되고 그 속성 (즉 Status)은 그들의 신원을 결정합니다.

+0

답해 주셔서 감사합니다. 그래서 나는 상태 객체를 AvaliableStatus로 감싸고 나의 예제에서와 같이 저장소를 사용하는 것이 좋습니까? (사용자 인터페이스에서 상태 목록을 제공하고 관리자가 상태 목록을 관리 할 수 ​​있어야합니다.) – Teimuraz

+0

상태 생성자가 정수 코드와 문자열 이름을 사용할 수 있습니까? – alltej

+0

예,하지만 무엇 때문에? – Teimuraz

2

AvailableStatus은 엔티티이고, Status은 기본적으로 AvailableStatus의 ID (코드)에 대한 래퍼 인 값 개체 (VO)입니다.

당신의 모델은 그다지 훌륭 할 수 있지만 실제로 깨달아야 할 것은 하나의 엔티티를 설명하는 것과 다른 하나의 VO를 설명하는 것입니다.

적절한 경계 조건 (Bounded Contexts : BC)이 부족하기 때문입니다. 유지 관리/관리/설정 BC를 가질 수 있습니다. 여기서 Status은 모든 다운 스트림 컨텍스트에서 VO가되는 동안 엔티티가됩니다.

0

상태는 값 개체이며 ID가 아닌 이름을 포함해야합니다. 두 필드는 사용 컨텍스트에서 불변입니다 (즉, Status 필드가있는 항목이 Status 객체를 변경할 수 없음). 래퍼 클래스는 필요 없습니다. 당신의 관리 응용 프로그램의 맥락에서

는, 상태는

관련 문제