문제

저는 DDD와 NHibernate를 처음 사용합니다.

내 현재 프로젝트에는 가치 객체가 포함 된 엔티티 사람이 있습니다. 오늘은 괜찮습니다. 그러나 언젠가는 내 값 객체 (이 경우 주소)가 엔티티가되어야한다는 요구 사항을 가질 것입니다.

더 데이터 중심적인 접근 방식으로 DDD- 웨이에서 이것을 모델링하려고 노력하기 전에, 나는 테이블 사람과 ID가있는 다른 테이블 주소를 가지고 있었는데, PK는 실제로 FK였으며, 그것은 사람의 ID였습니다 (예 : , 일대일 관계).

값 객체를 구성 요소로 매핑 할 때 값이 엔티티 테이블의 열로 매핑 될 것이라고 읽었습니다 (따라서 일대일 관계가 없을 것입니다).

내 생각은 필요할 때 단순히 내 주소 테이블에 대리 키를 추가 한 다음 엔티티가된다는 것입니다.

nhibernate를 사용하여 이것을 어떻게 설계해야합니까? 이미 주소 개체를 엔티티로 만들어야합니까?

죄송합니다. 내 질문이 명확한 지 모르겠습니다. 여기서 정말로 길을 잃었습니다.

도움이 되었습니까?

해결책

우리가 구축하는 시스템에서는 가치 객체를 별도의 테이블에 넣습니다. 내가 아는 한, nhibernate는 id 객체에 추가해야하지만, 우리는 이것을 무시하고 객체를 시스템의 값 객체로 취급합니다. 아시다시피, 값 객체는 추적 할 필요가없는 객체이므로 간단히 간과합니다. id 대상에서. 이것은 우리가 원하는 방식으로 데이터베이스를 모델링하고 원하는 방식으로 도메인 모델을 모델링하는 데 더 자유롭게 만듭니다.

다른 팁

Nhibernate가 엔티티 대신 적절한 값 객체로 매핑 할 수 있도록 구성 요소로 결합하여 구성 요소로 만들 수 있습니다.

이렇게하면 가상 속성이나 빈 보호 CTOR (비공개 일 수 있음)가 필요하지 않습니다.

Join("PROPOSAL_PRODUCT", product =>
{
    product.Schema(IsaSchema.PROPOSALOWN);
    product.KeyColumn("PROPOSAL_ID");

    product.Component(Reveal.Member<Proposal, Product>("_product"), proposalProduct =>
    {
        proposalProduct.Map...
    });
});
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top