서비스 내에서 여러 서비스 또는 여러 리포지토리를 사용하고 있습니까?
우리에게 두 개의 실체가 있다고 상상해 보세요.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-B
DTO처럼 보입니다.또한 모든 곳에서 동일한 버전을 사용할 수 있지만, 다양한 사용 사례에 적합한 특수 버전을 생성하는 것이 실제로 안전합니다(값은 불변이기 때문에).
언급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 |