मैं इन दिनों 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))
}
// ...
}
}
दूसरा
दूसरी संभावना इसके बजाय डोमेन सेवा के अंदर भंडार को इंजेक्ट करना है, और केवल डोमेन सेवा के माध्यम से भंडार का उपयोग करना है:
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
}
}
अब से, मैं यह भेद करने में सक्षम नहीं हूं कि कौन सा सबसे अच्छा है (यदि कोई सबसे अच्छा है) या वे दोनों को उनके संदर्भ में क्या कहते हैं।
क्या आप मुझे उदाहरण दे सकते हैं कि एक दूसरे से बेहतर और क्यों हो सकता है?