2014-09-13 9 views
3

도메인 기반 접근법 - 공통 서비스를 유지할 위치는 어디입니까?일반적인 서비스는 어디에 보관해야합니까?

예를 들어 UI의 여러 페이지/모듈에 드롭 다운을 표시하기 위해 getcountrylist, getstatelist, getcitylist (또는 MASTER 테이블의 다른 데이터)와 같은 공통 기능이 필요할 수 있습니다. 이러한 데이터가 데이터베이스에 존재한다면이 함수가 필요한 위치에 있다고 가정합니다.

  1. 은 내가 도메인/공통/CommonServices.php (I 내부 도메인 층은 좋은 의미?) 내에서 이러한 기능을 유지할 수 있습니다 (또는)

    내가이 인프라/공통 내부에 이러한 기능을 유지할 수 있습니다/CommonServices.php (이 경우에는 내가 올바르지 않은 Infraservice 레이어에서 직접 DAO 레이어에 연결해야합니까?)

  2. 이러한 공통 기능을 포함하고있는 파일에 대한 올바른 이름/제안 이름은 무엇입니까? (CommonServices.php (또는) CommonHelper.php (또는) CommonUtils.php (또는) MetadataService.php (또는)이 제안의)

답변

4

당신은 정말 다른 제한된 상황과 동일한 데이터가 필요한 경우 동일한 저장소로 검색하면 DDD에는 SHARED KERNEL이라는 것이 있습니다. 공유 커널이 너무 큰 성장 경우

The purpose of the Shared Kernel is to reduce duplication, but still keep two separate 
contexts. Development on a Shared Kernel needs a lot of care. Both teams may modify 
the kernelcode, and they have to integrate the changes. 
If the teams useseparate copies of the kernel code, they have to merge the codeas soon 
as possible, at least weekly. A test suite should be inplace, so every change done to 
the kernel to be tested right away. Any change of the kernel should be communicated 
to another team, and the teams should be informed, making them aware of the new 
functionality. 

어쨌든 그때는 모델링에 문제가 될 수 있습니다 당신이 DDD 빠른에서 몇 경계 상황에서 견적을 겹쳐 물건을 넣을 때 SHARED 커널 장소입니다. SHARED KERNEL은 가능한 한 작게 유지하십시오.

+0

기능이 Domain/Shared/CommonServices.php에 배치 될 수 있다는 의미입니까? –

0

이 동작은 데이터와 관련이 있으므로 특수 Repository 또는 Read Model 외관에 배치해야합니다. 도메인 서비스와 함께 갈 수도 있지만 서비스는 과부화 된 용어이며 데이터 액세스 측면 IMO를 전달하지 않습니다.

CQRS 방식을 채택한 경우 별도의 읽기 모듈에 배치하는 것이 좋습니다. 그렇지 않으면 도메인 계층에 인터페이스를 유지하고 다른 저장소와 마찬가지로 인프라에서 구현을 유지할 수 있습니다.

(편집)이 외관은 응용 프로그램 계층 서비스를 통해 응용 트랜잭션을 제어해야하는 집계를 조작하는 것과 대조적으로 컨트롤러 만이 직접 호출 할 수 있습니다.