这些天,我正在学习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
}
}
从现在开始,我无法区分哪个是最好的(如果有的话)或它们在上下文中所暗示的含义。
你能给我一个例子,一个可以比另一个更好的原因,为什么?