J'étudie DDD ces jours-ci, et j'ai des questions concernant la gestion des référentiels avec DDD.
En fait, j'ai rencontré deux possibilités:
Premier
La première façon de gérer les services que j'ai lus est d'injecter un référentiel et un modèle de domaine dans un service d'application.
De cette façon, dans l'une des méthodes de service d'application, nous appelons une méthode de service de domaine (vérification des règles métier) et si la condition est bonne, le référentiel est appelé sur une méthode spéciale pour persister / récupérer l'entité de la base de données.
Une façon simple de procéder pourrait être:
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))
}
// ...
}
}
Deuxième
La deuxième possibilité consiste à injecter le référentiel à l'intérieur de domainService à la place et à n'utiliser le référentiel que via le service de domaine:
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
}
}
À partir de maintenant, je ne suis pas en mesure de distinguer lequel est le meilleur (s'il y en a un) ou ce qu'ils impliquent tous les deux dans leur contexte.
Pouvez-vous me donner un exemple où l'un pourrait être meilleur que l'autre et pourquoi?