Domain Driven Design에 대해 처음 알게되었을 때 데이터베이스에 대해 원시인과 같은 SQL 쿼리를 던진 멋진 아이들을위한 최고의 노하우였던 저장소 및 작업 단위 패턴에 대해서도 소개했습니다. 이 주제에 대해 더 깊이 알게되면 작업 단위와 저장소를 세션 또는 컨텍스트라는 하나의 API로 구현하는 EF 및 NHibernate 와 같은 ORM 때문에 더 이상 필요하지 않다는 것을 알게 되었습니다.
이제 어떻게해야할지 모르겠습니다. 저장소에 또는 저장소에 없습니다. 데이터 유출을 단순화 할 수있는 아무것도 추가하지 않으면 서 유출 된 추상화가 지나치게 복잡해한다는 주장을 실제로 이해하지만 내 응용 프로그램의 모든 가능한 측면을 Entity Framework 와 결합하는 것은 옳지 않다고 생각 합니다. 일반적으로 몇 가지 간단한 지침을 따릅니다.
- 도메인 계층은 엔티티, 서비스, 리포지토리를 포함하는 시스템의 핵심입니다.
- 인프라 계층은 인프라 문제 (예 : 파일, 데이터베이스, 프로토콜)의 도메인 인터페이스 구현을 제공합니다.
- 애플리케이션 계층은 사물을 연결하고 모든 것을 오케스트레이션하는 컴포지션 루트를 호스팅합니다.
내 솔루션은 일반적으로 다음과 같습니다.
Domain.Module1
Domain.Module2
IModule2Repo
IModule2Service
Module2
Infrastructure.Persistence
Repositories
EntityFrameworkRepositoryBase
MyApp
Boostrapper
-> inject EntityFrameworkRepositoryBase into IRepository etc.
나는 IRepository<'T>
데이터 액세스 방법을 알려주는 다른 것에 의존하지 않는 도메인 문제 인 도메인 레이어를 사용하여 도메인 계층을 깨끗하게 유지 합니다. 이제 IModule2Service
데이터 액세스가 필요한 구체적인 구현을 수행 할 때 DbContext
이를 인프라 계층에 직접 연결 하여 주입해야합니다 . ( Visual Studio 프로젝트로 오면 순환 종속성으로 인해 까다로울 수 있습니다! )
또한 보관소 와 작업장에 대한 대안이 될 수있는 것은 무엇입니까 ? CQRS? 순수한 인프라 프레임 워크를 어떻게 추상화합니까?