나는 건축에서 일하고 있는데, 웹 클라이언트와 모바일 앱을위한 나머지 API를 제공 할 것입니다. Spring (spring mvc, spring data jpa, ... etc)을 사용하고 있습니다. 도메인 모델은 JPA 사양으로 코딩됩니다.
클린 아키텍처의 개념을 적용하려고합니다 ( https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html ). jpa 도메인 모델을 유지하기 때문에 전부는 아닙니다.
레이어를 통한 실제 흐름은 다음과 같습니다.
프런트 엔드 <-> API 서비스 -> 서비스 -> 리포지토리 -> DB
- 프론트 엔드 : 웹 클라이언트, 모바일 앱
- API 서비스 : Rest Controllers, 여기서는 변환기와 dto를 사용하고 서비스를 호출합니다.
- 서비스 : 구현과의 인터페이스 및 비즈니스 로직을 포함
- 리포지토리 : CRUD 작업과 일부 SQL 쿼리를 오염시키는 자동 구현 (스프링 데이터 JPA로 수행)과 리포지토리 인터페이스
내 의심 : 서비스와 저장소 사이에 추가 계층을 사용해야합니까?
이 새로운 흐름을 계획하고 있습니다.
프론트 엔드 <-> API 서비스 -> 서비스 -> 지속성 -> 저장소 -> DB
이 지속성 계층을 사용해야하는 이유 클린 아키텍처 기사에서 말했듯이 불가지론 지속 레이어에 액세스하는 서비스 구현 (비즈니스 로직 또는 유스 케이스)을 원합니다. 다른 "데이터 액세스"패턴을 사용하기로 결정한 경우 (예 : 리포지토리 사용을 중단하기로 결정한 경우) 변경이 필요하지 않습니다.
class ProductServiceImpl implements ProductService {
ProductRepository productRepository;
void save(Product product) {
// do business logic
productRepository.save(product)
}
}
따라서 다음과 같은 지속성 레이어를 사용하고 있다고 생각합니다.
class ProductServiceImpl implements ProductService {
ProductPersistence productPersistence;
void save(Product product) {
// do business logic
productPersistence.save(product)
}
}
다음과 같이 지속성 계층의 구현 :
class ProductPersistenceImpl implements ProductPersistence {
ProductRepository productRepository;
void save(Product product) {
productRepository.save(product)
}
}
따라서 지속성 계층의 구현을 변경하고 서비스를 변경하지 않고 리포지토리가 프레임 워크와 관련되어 있다는 사실과 관련이 있습니다.
어떻게 생각해? 감사.