2012-02-09 5 views
1

우리는 새로운 프로젝트에 DDD를 적용하려고합니다. Microsoft DDD Nlayer를 샘플 프로젝트로 사용하고 있습니다. 이것은 Microsoft Nlayer DDD보다는 DDD 질문에 더 가깝습니다. DDD에서는 데이터 레이어를 응용 프로그램 레이어로만 구성하고 도메인 레이어로는 만들지 않는다고 가정합니다. 그러나 문서에서도 도메인 계층에서 여전히 데이터 계층을 호출 할 수 있다고 말합니다 (여전히 방지라고 말함). 어떻게해야합니까? Visual Studio에서 데이터 레이어 양식의 도메인 계층에 대한 참조를 추가하려고하면 '이 프로젝트를 참조로 추가하면 순환이 발생합니다. 응용 프로그램 계층에서 데이터를 가져온 다음 도메인 계층으로 전달할 수는 있지만 논리에 기반하여 데이터를 가져와야하는 경우는 아닙니다. 데이터에 액세스 할 수없는 경우 도메인 계층에 어떤 논리를 사용할 수 있습니까? 대부분의 시간 논리는 다른 클래스와 해당 데이터를 기반으로합니다 (동일한 도메인 또는 다른 도메인 내에서). 나를 안내하십시오. 이것은 레이어가 어떻게 서로 이야기해야 하는지를 알지 못한다는 것을 알지 못합니다.레이어가 NLayered DDD (도메인 기반 디자인)에서 서로 이야기하는 방식

답변

1

이것은 소프트웨어 (최소한 OLTP 종류)가 작동하는 방식이 아닙니다. 사용 사례를 생각하고, 관련된 객체를 생각해보십시오. 모든 데이터를 미리 쿼리하십시오. 데이터를 사용하여 오브젝트를 인스턴스화하십시오. 유스 케이스를 수행하기 위해 객체를 협업하게하십시오. 변경된 오브젝트의 데이터를 저장하십시오. 아래

예 : 당신이 한 번에 너무 많은 오브젝트를 변경하는 경우

public class IncludePhotoInPortfolioHandler { 
    public void Handle(IncludePhotoInPortfolio useCase) { 
    var photo = _photoRepo.GetById(useCase.PhotoId); 
    var portfolio = _portfolioRepo.GetById(useCase.PortfolioId); 
    portfolio.Include(photo); 
    } 
} 

, 당신이 잘못을하고 있어요. 모든 종류의 불쾌한 문제가 발생할 것입니다. 이상한 경우에는 객체에있는 식별자를 기반으로 데이터/객체를 가져와 식별자를 노출하고 관련 객체를 가져 오는 데 사용해야합니다.

팁 :이 NLayered DDD 프로젝트에 머리를 쓰지 않고도 파란색 책에서 DDD를 읽어 볼 수 있습니다. 받침대 위에 레이어를 두지 마십시오.

관련 문제