2011-01-28 2 views
2

Evans의 프로젝트를 샘플 DDD 프로젝트에서 보았을 때 Evans는 Cargo 엔티티에서 값 개체 인 tracknumber를 사용합니다. 왜 그가 평범한 것을 선택하지 않았 냐면 string tracknumber 대신 identity를 위해 value 객체를 선택 했습니까?개체에서 식별자로 값 개체 사용

public class Cargo implements Entity<Cargo> { 

    private TrackingId trackingId 
} 

public final class TrackingId implements ValueObject<TrackingId> { 

    private String id; 

    /** 
    * Constructor. 
    * 
    * @param id Id string. 
    */ 
    public TrackingId(final String id) { 
    Validate.notNull(id); 
    this.id = id; 
    } 

답변

2

달성 할 몇 가지 : 여기 에반스 조각입니다

  • 이 추적 ID는
  • 널 안 로직을 캡슐화가 로직을 캡슐화가 추적 ID는 안 한 번 설정 변경.

일반 문자열을 사용하면 Cargo 객체가 이러한 규칙을 인식해야합니다. 값 객체 방식을 사용한다는 것은 TrackingId가이 규칙을 자체적으로 유지한다는 것을 의미합니다.

+0

우리는 .NET 세계에서 동일한 결과를 얻을 수 있습니다. 우리는 생성자를 통해서만 설정되고 나중에 변경할 수 없거나 getter 없이는 setter가없는 readonly 변수가 있습니다. – kamal

+0

물론, 로직은 TrackingId가 아니라 Cargo 오브젝트에있을 것입니다. 필자가 지적한 바는 값 객체 접근법이 추적 ID 자체에 해당 로직을 캡슐화한다는 것입니다. – David

+0

@kamal. TrackingId는 Cargo 객체가 필요로하지 않거나 알고 싶어하는 다른 유용한 작업을 수행 할 수도 있습니다 (예 : 고객 조회에서 자체 서식 지정, 다음 사용 가능한 ID 번호 할당 및 존재를 정당화하는 것 이외의 까다로운 논리). . 건배 – Berryl