요즘 DDD를 공부하고 있는데 DDD로 리포지토리를 관리하는 방법에 대한 몇 가지 질문이 있습니다.
실제로, 나는 두 가지 가능성을 만났다.
첫 번째
내가 읽은 서비스를 관리하는 첫 번째 방법은 응용 프로그램 서비스에 리포지토리와 도메인 모델을 주입하는 것입니다.
이러한 방식으로 응용 프로그램 서비스 방법 중 하나에서 도메인 서비스 방법 (비즈니스 규칙 확인)을 호출하고 조건이 양호하면 저장소를 데이터베이스에서 엔티티를 유지 / 검색하기 위해 특수한 방법으로 호출합니다.
이를 수행하는 간단한 방법은 다음과 같습니다.
class ApplicationService{
constructor(domainService, repository){
this.domainService = domainService
this.repository = repository
}
postAction(data){
if(this.domainService.validateRules(data)){
this.repository.persist(new Entity(data.name, data.surname))
}
// ...
}
}
두번째 것
두 번째 가능성은 대신 domainService 내부에 저장소를 삽입하고 도메인 서비스를 통해서만 저장소를 사용하는 것입니다.
class ApplicationService{
constructor(domainService){
this.domainService = domainService
}
postAction(data){
if(this.domainService.persist(data)){
console.log('all is good')
}
// ...
}
}
class DomainService{
constructor(repository){
this.repository = repository
}
persist(data){
if(this.validateRules(data)){
this.repository.save(new Entity(data.name))
}
}
validateRules(data){
// returns a rule matching
}
}
지금부터 나는 어느 것이 가장 좋은지 (하나가 가장 좋은 것이 있는지) 또는 그들이 맥락에서 두 가지를 의미하는 것을 구별 할 수 없습니다.
어느 쪽이 다른 쪽보다 낫고 왜 그럴 수 있는지 예를 들어 주시겠습니까?