Ich lerne derzeit DDD und habe einige Fragen zum Verwalten von Repositorys mit DDD.
Eigentlich habe ich zwei Möglichkeiten getroffen:
Erster
Die erste Möglichkeit zum Verwalten von Diensten, die ich gelesen habe, besteht darin, einem Anwendungsdienst ein Repository und ein Domänenmodell hinzuzufügen.
Auf diese Weise rufen wir in einer der Anwendungsdienstmethoden eine Domänendienstmethode (Überprüfung von Geschäftsregeln) auf. Wenn die Bedingung gut ist, wird das Repository mit einer speziellen Methode aufgerufen, um die Entität aus der Datenbank zu erhalten / abzurufen.
Ein einfacher Weg, dies zu tun, könnte sein:
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))
}
// ...
}
}
Der zweite
Die zweite Möglichkeit besteht darin, das Repository stattdessen in den domainService einzuschleusen und das Repository nur über den domainService zu verwenden:
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
}
}
Von nun an kann ich nicht mehr unterscheiden, welches das beste ist (wenn es eines am besten gibt) oder was beide in ihrem Kontext implizieren.
Können Sie mir ein Beispiel geben, wo eines besser sein könnte als das andere und warum?