2017-01-29 1 views
0

DDD (Domain-Driven Design) : 특정 엔티티 서비스 내에서 다른 엔티티의 저장소를 참조 할 수 있습니까?특정 엔티티 서비스 내의 다른 엔티티 저장소를 참조 할 수 있습니까?

예를 들어 (I은 예 문맥 약간의 ​​경우 미안 해요) :

학생StudentAddress 기관

public class StudentService : ServiceBase<Student>, IStudentService { 

    private readonly IStudentAddressRepository _studentAddressRepository; // Is this reference valid? 
    private readonly IStudentRepository _studentRepository; 

    public StudentService(IStudentRepository repository, IStudentAddressRepository studentAddressRepository) : base(repository) 
    { 
     //... IoC 
    }  
} 

이 있다는 것을 알고는이 기준인가 StudentAddressRepository 또는 심지어 StudentAddress 엔티티에 대해서 유효합니까?

+0

서비스는 무엇을하고 있습니까? – tomliversidge

+1

'StudentService'는 "학생 저장소 * 및 *"에 "학생 저장소"가 있다는 것이 이상하게 보입니다. 나는 그것이 저장소가되어야한다고 생각하지 않는다. 그러나이 질문은 오히려 의견에 근거한 것입니다. –

+0

죄송합니다. 제가 실수를. 정말 ServiceBase입니다. –

답변

2

나는 DDD 조건에서 개념적으로는 괜찮다고 생각하지만 때로는 가능한 모델링 문제를 지적 할 수도 있습니다. 서비스가 존재하는 이유에 대해 좀 더 자세하게 설명하면 도움이 될 것입니다.

파란색 책에서 Eric Evans는 Accounts와 Ledger의 두 개체와 상호 작용하는 자금 이체 서비스의 예를 보여줍니다. 도메인 서비스 생성자에 각각의 리포지토리를 두는 대신 두 개체를 받아들이는 도메인 서비스를 구현하여 응용 프로그램 계층에로드 할 책임을 유지합니다. 예를 들어

, 같은 : 도메인 서비스를 추가 할 때 생각하는

public static class StudentService { 

    public static void WhateverItIsYouAreDoing(Student student, StudentAddress studentAddress) { 
     // do something 
    } 
} 

또 다른 것은, 그것은 유비쿼터스 언어에 추가 않습니다입니까? 도메인 전문가와 서비스에 대해 논의 할 수 있습니까? 나는. "자금 이체 서비스"는 도메인 전문가와상의 할 수 있습니다.

+0

답변 해 주셔서 감사합니다. 위의 질문에 답하기 : 처음에는 지연로드를 사용하지 않고 학생 주소를 복구하고자하므로이 저장소 (IStudentAddressRepository)를 호출하여이 목적으로 학생 서비스 내에서 사용하는 것이 올바른지 여부에 대한 질문이 생겼습니다. 이미 학생의 주소를 알려줄 것입니다. –

+0

나는 이것을 위해 서비스를 사용하지 않을 것이다. 학생과 함께 주소를 반환하고 싶다면 StudentRepository (GetWithAddresses)와 같은 메소드가 필요합니다. 그러나, 당신이 무엇을하려고하는지, 왜 주소가 필요한지에 달려 있습니다 :) – tomliversidge

+0

UI (MVC)에 표시 할 주소가 필요합니다. 데이터 복구가 응용 프로그램 <---> Repository 사이에 있다고 알려주십시오. (저는 DDD를 초기화하고 있습니다). –

관련 문제