3

문제 :DDD 리포지토리 내에서 서비스 사용

XML 피드에서 타사 데이터를 가져옵니다. 나는 그 자료를 가지고 그것을 실체들로 변환 할 필요가있다. 토론을위한

포인트 :

내 질문이 경우 서비스 및 저장소를 사용하는 방법입니다. 따라서 예를 들어 피드의 데이터를 가져온 서비스를 만든 다음 해당 서비스를 리포지토리에 삽입하면 데이터를 가져 와서 엔티티로 변환 할 수 있습니다. 그러나 이것이 올바른 접근법인지 확실하지 않습니다.

저장소에는 데이터를 가져 와서 엔터티에 매핑하는 논리가있을 수 있지만 저장소가 해당 논리를 처리해야한다고 생각하지 않습니까? 아니면해야합니까?

DDD 분리의 관점에서 볼 때,이 최상의 설계는 어떻게해야합니까?

+0

여기 서비스로 설명하는 것이 DDD 조건에서 도메인 서비스로 간주되지 않을 것이라고 지적하는 것이 중요하다고 생각합니다. 훌륭한 조언은이 시나리오에는 적용되지 않지만 * "서비스는 리포지토리에 주입해서는 안됩니다."*라는 일반적인 조언. – MattDavey

답변

1

서비스는 리포지토리에 삽입하면 안되지만 그 반대입니다. 저장소가 꽉 데이터베이스에 연결되어 있지 않은 경우 (대부분의 구현이 될 것으로 보인다으로)

, 당신은 할 수 :

  1. XML에서 데이터를 가져 오기 위해 저장소를;
  2. 엔티티로 데이터를 변환하는 서비스.
  3. 새 엔티티를 유지하는 또 다른 저장소.

다른 접근법 : 데이터 는 서비스 계층 엔터티로 변환 페치하고 지속성을 위해 저장소 엔티티를 통과한다.

3

번호

저장소는 이렇게 이제까지 무엇 무지 지속성 provinding 제외한 모든 도메인 로직이 없어야합니다.

그러나 저장소 자체는 데이터 엔티티와 도메인 엔티티간에 어떠한 종류의 변환도 가질 수 있습니다. 또한 요청 된 도메인 엔티티를 빌드 할 수 있도록 테이블이나 데이터베이스를 원하는 수만큼 사용할 수 있습니다.

  • 그것은 단지 저장소에 사용하는 "서비스"의 경우 :이 도메인의 일부 서비스의 경우
  • : 피드를 다운로드 없음
+0

+1 도메인 서비스와 기술 인프라를 구별하는 것이 중요합니다. – MattDavey

1

그 일이 없다 DDD 서비스가 아닙니다. DAO입니다. 예, 저장소는 집계를 구성하는 데 필요한 DAO를 사용할 수 있습니다. 대부분의 경우 DAO는 Entity Framework의 NHibernate 또는 DbSet의 ISession과 같이 ORM이 노출하는 것이지만 아무것도 될 수 있습니다. XML 피드 리더. Amazon S3 API. 파일 판독기 ...

3

피드의 데이터를 가져 와서 해당 서비스를 저장소에 삽입하는 서비스를 만들 수 있습니다.

도메인과 관련이 없으므로 DDD에서 도메인 서비스로 간주되지 않습니다.그것은 순수한 기술 인프라 문제입니다.

제 질문은이 경우 서비스 및 리포지토리를 사용하는 방법입니다.

여기에는 두 가지 문제가있을 수 있습니다. 저장소는 제한된 컨텍스트의 관점에서 데이터에 대한 액세스를 제공하지만 분명히 XML 데이터와 저장소 사이에 추가 데이터 조작/변형이있을 것입니다.

DDD 조건에서 이것은 반부패 계층으로 간주 될 수 있습니다. 외부 데이터 원본을 제어 할 권한이 없으므로이 외부 데이터의 형식이 신중하게 설계된 도메인 모델의 무결성을 손상시키는 것을 방지해야합니다.

리포지토리에 반부패 레이어를 주입하는 것은 목적이 잘 정의되어있는 한 괜찮습니다. 이것은 도메인과 아무 관련이 없으므로 도메인 서비스로 간주되지 않을 것입니다. 외부 데이터 소스의 특성에 따라 순수하게 제작됩니다.

관련 문제