2012-05-22 2 views
0

새로운 응용 프로그램을 만들고 있으며 도메인 기반 디자인을 처음 사용합니다. 나는 문서를 읽어 봤는데 내가 도메인 모델의 대부분을 모델링하기 위해 관리했습니다하지만 두 쿼리에 대한 몇 가지 조언을하고 싶습니다 :도메인 기반 디자인 모델링 쿼리

  1. 나는 두 개의 도메인 채널 및 프로그램 개체를 가지고있다. 둘 다 독립적으로 액세스 할 수 있으므로이 둘을 엔티티로 모델링했습니다. 채널은 프로그램의 목록을 가질 수 있으므로 이것을 채널의 속성으로 넣었습니다. 내 쿼리는 프로그램 목록을 채우는 방법입니다. 나는 제품 도메인 개체가

    Channel { 
        String channelId 
        List <Program> programList 
    } 
    
    Program { 
        String programId { 
    } 
    
    ChannelService { 
        Channel getChannelById(String channelId) 
    } 
    
    ProgramService { 
        Program getProgramById(String programId) 
        List <Program> getProgramsByChannelById(String channelId) 
    } 
    
  2. 하지만 일부 속성 : 먼저 채널 정보를 다음 채널 등을위한 프로그램의 목록을 얻을 수있는 ProgramService를 호출하는 ChannelService의 getChannerById 방법에 대한 OK인가 (예 : 명세와 호환성)은 꽤 시간이 걸리는 작업을 필요로합니다. 이러한 속성은 항상 필요하지는 않으므로 도메인 객체의 일부로 이들 속성을 넣고 필요할 때 이러한 속성을 채우는 별도의 서비스 메소드를 가질 수 있습니다.

    Product { 
        String productId 
        Specification specification 
        List <Product> compatibleProducts 
    } 
    
    ProductService { 
        Product getProduct(String productId); 
        void getProductSpecifications(Product product); 
        void getCompatibleProducts(Product product); 
    } 
    

은 어떤 조언은 매우 감사하겠습니다.

답변

6

DDD에서 엔티티를 디자인 할 때 하나의 엔티티에서 다른 엔티티로 연관을 작성해서는 안되며 표시 또는 조회 목적으로 만 연관이 사용되어야합니다. 채널에 일련의 프로그램이있는 것은 사실이지만 채널 엔터티에 필요한 채널과 프로그램 세트 간의 연관성은 무엇입니까? 더 중요한 것은 쿼리 측면만을 고려한다면 코드에 DDD를 강요하지 않아도된다는 것입니다. 대신 엔티티를 디자인 할 때 엔티티가 구현해야하는 동작을 고려해야합니다. 엔티티가 작동하지 않지만 데이터 컨테이너로만 사용되는 경우 DDD가 필요하지 않습니다. 귀하의 질문에 대답하기 위해 각 쿼리의 요구 사항을 충족시키는 읽기 모델 클래스를 사용합니다. 예를 들어, 제품 모델의 경우 하나의 쿼리에 사양 속성이 필요하고 다른 쿼리에는 해당 쿼리에 대한 고유 한 읽기 모델 클래스를 만듭니다. 이 클래스는 엔티티가 아니며 단순 읽기 전용 값 객체이며 동작이 없으며 작업은 데이터를 나타내는 것입니다. 쿼리를 구현하는 것과 관련하여 몇 가지 옵션이 있습니다. ChannelService와 ProgramService를 호출하는 것은 하나의 옵션입니다. 그러나 데이터가 모두 단일 데이터베이스에 함께 저장되는 경우 한 번의 호출로 필요한 모든 데이터를 반환하는 리포지토리를 만드는 것이 가장 좋은 이유는 무엇입니까? 이 주제에 대한 자세한 내용은 DDD의 읽기 모델에서 post을 확인하십시오.

+0

감사합니다. – Surjit

관련 문제