私は最近DDDを勉強していますが、DDDでリポジトリを管理する方法について質問があります。
実際、私は2つの可能性に出会いました:
最初の1つ
私が読んだサービスを管理する最初の方法は、アプリケーションサービスにリポジトリとドメインモデルを挿入することです。
このように、アプリケーションサービスメソッドの1つで、ドメインサービスメソッドを呼び出し(ビジネスルールをチェック)、条件が良好な場合、データベースからエンティティを永続化/取得するために、リポジトリが特別なメソッドで呼び出されます。
これを行う簡単な方法は次のとおりです。
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))
}
// ...
}
}
二つ目
2番目の可能性は、代わりに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
}
}
今から、どちらがベストか(ベストがあれば)、またはそれらが文脈の両方で暗示しているものを区別することはできません。
片方がもう片方よりも優れている可能性がある例とその理由を教えてください。