ServiceStack을 사용하여 Rest 서비스를 구현 중입니다. 우리는 저장소 패턴과 자동 와이어 저장소를 IOC를 통해 서비스에 사용합니다.저장소 설계 : 트랜잭션 공유
현재 우리는 하나의 데이터베이스 모델이 하나의 저장소와 쌍을 이루는 간단한 접근 방식을 사용합니다. 즉, 하나의 서비스에서 두 개 이상의 엔터티가 조작 될 때마다 트랜잭션 경계가 사용되지 않습니다. 리포지토리는 순차적으로 호출됩니다. 하나 이상의 단계가 실패하면 수동으로 db를 초기 상태로 "롤백"해야합니다. 최악의 경우, 요청 스레드가 끊어 지거나 검사되지 않은 예외 (예 : OutOfMemoryException)가 발생하면 데이터베이스가 일관성없는 상태로 남습니다.
나는 가상 솔루션 세트를 가지고,하지만 난 적절한으로 아무도 생각하지 :
- 를 열고 연결 및 서비스 수준에서 거래를 시작합니다. 리포지토리를 호출하고 연결을 전달합니다. 이것은 분명히 모든 ddd 디자인 지침에 위배되므로 잘못되었습니다. 전체적인 요점은 상위 계층이 구체적인 지속성에 대해 완전히 모르는 것입니다. 게다가 단위 테스트가 엉망이됩니다.
- 첫 번째 저장소에서 트랜잭션을 시작하십시오. 다른 종속 리포지토리가 호출되지만 이미 열려있는 연결을 전달합니다. 이것은 또한 나쁜 디자인 같아 보입니다.
- 집합체 정의. 저는 도메인 모델링 전문가가 아니기 때문에이 하나의 위대한 팬이 아니며, 집계를 도입함으로써 디자인 오류를 도입 할 가능성이 있습니다. 현재 모델의 한 가지 장점은 간단하다는 것입니다.
이 문제에 대한 제안 사항이 있습니까? 미리 감사드립니다.