source

서비스 내에서 여러 서비스 또는 여러 리포지토리를 사용하고 있습니까?

lovecheck 2023. 7. 21. 21:42
반응형

서비스 내에서 여러 서비스 또는 여러 리포지토리를 사용하고 있습니까?

우리에게 두 개의 실체가 있다고 상상해 보세요.EntityA그리고.EntityB두 엔티티 모두 데이터베이스를 쿼리할 저장소가 있습니다.EntityARepository그리고.EntityBRepository두 사람을 위한 서비스도 있습니다.EntityAService그리고.EntityBService.

이제 한 가지 방법이 있습니다.EntityBService이것 또한 사용해야 합니다.EntityA이것을 하는 올바른 방법은 무엇일까요?

  • 만약에EntityBService을 사용합니다.EntityARepository직접적으로?
  • 만약에EntityBService을 사용합니다.EntityAService?

저장소를 직접 사용하는 것이 매우 편리하다는 것을 알 수 있었지만, 두 개의 엔티티만 있는 것이 아니라 약간 지저분해지는 것 같습니다.

이 주제 또는 권장 사항과 관련하여 공통적인 설계 패턴이 있습니까?

TLDR: 상황에 따라 다릅니다!

도메인 기반 설계를 따르려고 한다면, 차별화하는 것이 좋다고 생각합니다.service그리고.repository자세한 내용은 다를 수 있지만 저장소에 대한 Martin Fowler의 정의를 고수하겠습니다.

(...) 리포지토리는 메모리 내 도메인 개체 컬렉션처럼 작동하는 도메인과 데이터 매핑 계층 사이를 중재합니다. (...)

서비스의 경우:

서비스 계층은 클라이언트 계층을 연결하는 관점에서 응용프로그램의 경계 [Cockburn PloP] 및 사용 가능한 작업 집합을 정의합니다.애플리케이션의 비즈니스 로직을 캡슐화하고, 트랜잭션을 제어하며, 운영 구현 시 대응을 조정합니다.

는 점을 지적할 가치가 있습니다.service뿐만 아니라repository상업 논리대부분의 단순한 시나리오에 사용repository단일 데이터베이스 액세스를 마치지만 고급 시나리오의 경우 단일 엔터티를 생성하려면 여러 데이터베이스에 액세스해야 할 수 있습니다.repository역할은 이 털실을 제거하는 것입니다.service층.

다음은 여러분이 생각해 낼 수 있는 것입니다.

  1. 사용하다EntityARepository직접적으로EntityBService만약 당신이 하려는 일이 단지 당신을 데려오는 것이라면.EntityA관련된 어떠한 사업 논리적으로EntityA다음은 간단한 예입니다.

EntityBService작업 수행EntityB하지만 그것은 순수하게 의존합니다.EntityA주.

  1. 사용하다EntityAServiceEntityBService요청이 있으면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

반응형