Я сьогодні вивчаю 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
}
}
Відтепер я не в змозі розрізнити, хто з них найкращий (якщо є один найкращий) або що вони мають на увазі обидва у своєму контексті.
Чи можете ви надати мені приклад, де один міг бути кращим за інший і чому?