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