서비스 내에서 여러 서비스 또는 여러 리포지토리를 사용하고 있습니까?
우리에게 두 개의 실체가 있다고 상상해 보세요.EntityA그리고.EntityB두 엔티티 모두 데이터베이스를 쿼리할 저장소가 있습니다.EntityARepository그리고.EntityBRepository두 사람을 위한 서비스도 있습니다.EntityAService그리고.EntityBService.
이제 한 가지 방법이 있습니다.EntityBService이것 또한 사용해야 합니다.EntityA이것을 하는 올바른 방법은 무엇일까요?
- 만약에
EntityBService을 사용합니다.EntityARepository직접적으로? - 만약에
EntityBService을 사용합니다.EntityAService?
저장소를 직접 사용하는 것이 매우 편리하다는 것을 알 수 있었지만, 두 개의 엔티티만 있는 것이 아니라 약간 지저분해지는 것 같습니다.
이 주제 또는 권장 사항과 관련하여 공통적인 설계 패턴이 있습니까?
TLDR: 상황에 따라 다릅니다!
도메인 기반 설계를 따르려고 한다면, 차별화하는 것이 좋다고 생각합니다.service그리고.repository자세한 내용은 다를 수 있지만 저장소에 대한 Martin Fowler의 정의를 고수하겠습니다.
(...) 리포지토리는 메모리 내 도메인 개체 컬렉션처럼 작동하는 도메인과 데이터 매핑 계층 사이를 중재합니다. (...)
서비스의 경우:
서비스 계층은 클라이언트 계층을 연결하는 관점에서 응용프로그램의 경계 [Cockburn PloP] 및 사용 가능한 작업 집합을 정의합니다.애플리케이션의 비즈니스 로직을 캡슐화하고, 트랜잭션을 제어하며, 운영 구현 시 대응을 조정합니다.
는 점을 지적할 가치가 있습니다.service뿐만 아니라repository상업 논리대부분의 단순한 시나리오에 사용repository단일 데이터베이스 액세스를 마치지만 고급 시나리오의 경우 단일 엔터티를 생성하려면 여러 데이터베이스에 액세스해야 할 수 있습니다.repository역할은 이 털실을 제거하는 것입니다.service층.
다음은 여러분이 생각해 낼 수 있는 것입니다.
- 사용하다
EntityARepository직접적으로EntityBService만약 당신이 하려는 일이 단지 당신을 데려오는 것이라면.EntityA관련된 어떠한 사업 논리적으로EntityA다음은 간단한 예입니다.
EntityBService작업 수행EntityB하지만 그것은 순수하게 의존합니다.EntityA주.
- 사용하다
EntityAService에EntityBService요청이 있으면EntityA에 관련된 비즈니스 논리를 포함합니다.EntityA다음은 간단한 예입니다.
EntityBService작업 수행EntityB그리고.EntityA그리고 나중에 생성해야 합니다. 생성에는 허용 여부를 확인하는 것과 같은 비즈니스 로직(예: 사용자 역할 기반)이 포함됩니다.
이 주제 또는 권장 사항과 관련하여 공통적인 설계 패턴이 있습니까?
한 가지 일반적인 방법은 동일한 트랜잭션에서 서로 다른 위치에 저장된 엔티티를 변경하지 않는 것입니다.이렇게 하지 않는 한 가지 방법은 모든 트랜잭션에서 하나의 엔티티만 활성화하는 것입니다.
따라서 우리는 A 기관과 B로부터 필요한 정보의 사본을 합리적으로 보유할 수 있습니다.아니면 우리는 B기관과 A로부터 필요한 정보의 사본을 가지고 있을지도 모릅니다.
어느 한 엔티티도 변경하지 않는 사용 사례의 경우 데이터 복사본만 사용할 수 있습니다.
가 우가사는경우하용리경우▁are를 사용하는 .entityA그리고.recent-copy-of-B우리는 엔티티 A가 저장소에서 왔다는 것을 알고 있습니다.는 어디에 ?recent-copy-of-B어디서 왔습니까?글쎄요, 그것은 저장소처럼 보이는 추상화에서 비롯됩니다. 단, (a) 실체가 아닌 가치를 가져오고 (b) 읽기 전용이라는 점은 제외합니다.
recent-copy-of-BDTO처럼 보입니다.또한 모든 곳에서 동일한 버전을 사용할 수 있지만, 다양한 사용 사례에 적합한 특수 버전을 생성하는 것이 실제로 안전합니다(값은 불변이기 때문에).
언급URL : https://stackoverflow.com/questions/58340656/using-multiple-services-or-multiple-repositories-within-service
'source' 카테고리의 다른 글
| 어떤 매개 변수 세트가 사용되었습니까? (0) | 2023.07.26 |
|---|---|
| 두 문자열을 연결하기 위해 '+'를 사용하지 않을 이유가 있습니까? (0) | 2023.07.21 |
| 최대 절전 모드의 기준 이해#setMaxResults (0) | 2023.07.21 |
| Oracle 복합 기본 키/외부 키 질문 (0) | 2023.07.21 |
| numpy 배열에서 n번째 항목마다 하위 샘플링 (0) | 2023.07.21 |