Bugünlerde DDD çalışıyorum ve DDD ile depoların nasıl yönetileceği ile ilgili bazı sorularım var.
Aslında iki olasılıkla karşılaştım:
İlk
Okuduğum hizmetleri yönetmenin ilk yolu, bir uygulama hizmetine bir havuz ve bir etki alanı modeli enjekte etmektir.
Bu şekilde, uygulama hizmeti yöntemlerinden birinde, bir etki alanı hizmeti yöntemini (iş kurallarını kontrol ederek) çağırırız ve koşul iyiyse, depoya varlık veritabanından devam ettirmek / almak için özel bir yöntem çağrılır.
Bunu yapmanın basit bir yolu olabilir:
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))
}
// ...
}
}
İkinci
İkinci olasılık, depoyu domainService içindeki yerine enjekte etmek ve depoyu yalnızca domain hizmeti aracılığıyla kullanmaktır:
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
}
}
Bundan sonra, hangisinin en iyisi olduğunu (hangisi en iyisi varsa) veya bunların ikisinde de ne ifade ettiklerini ayırt edemiyorum.
Bana birinin diğerinden daha iyi olabileceği bir örnek verebilir misiniz ve neden?