Saya sedang mempelajari DDD hari ini, dan saya memiliki beberapa pertanyaan mengenai bagaimana mengelola repositori dengan DDD.
Sebenarnya, saya telah bertemu dua kemungkinan:
Pertama
Cara pertama mengelola layanan yang saya baca adalah menyuntikkan repositori dan model domain dalam layanan aplikasi.
Dengan cara ini, dalam salah satu metode layanan aplikasi, kami memanggil metode layanan domain (memeriksa aturan bisnis) dan jika kondisinya baik, repositori dipanggil pada metode khusus untuk bertahan / mengambil entitas dari database.
Cara sederhana untuk melakukan ini adalah:
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))
}
// ...
}
}
Kedua
Kemungkinan kedua adalah menyuntikkan repositori di dalam domainService saja, dan hanya menggunakan repositori melalui layanan domain:
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
}
}
Mulai sekarang, saya tidak dapat membedakan mana yang terbaik (jika ada yang terbaik) atau apa yang mereka maksudkan keduanya dalam konteks mereka.
Bisakah Anda memberi saya contoh di mana yang satu bisa lebih baik dari yang lain dan mengapa?