ฉันกำลังศึกษา DDD ในวันนี้และฉันมีคำถามบางอย่างเกี่ยวกับวิธีจัดการที่เก็บด้วย DDD
อันที่จริงฉันได้พบกับสอง possibilies:
คนแรก
วิธีแรกในการจัดการบริการที่ฉันอ่านคือการฉีดที่เก็บและรูปแบบโดเมนในบริการแอปพลิเคชัน
ด้วยวิธีนี้หนึ่งในวิธีการบริการแอปพลิเคชันเราเรียกวิธีการบริการโดเมน (การตรวจสอบกฎธุรกิจ) และถ้าเงื่อนไขเป็นสิ่งที่ดีพื้นที่เก็บข้อมูลจะถูกเรียกในวิธีพิเศษเพื่อยืนยัน / ดึงเอนทิตีจากฐานข้อมูล
วิธีง่ายๆในการทำสิ่งนี้อาจเป็น:
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
  }
}
จากนี้ไปฉันไม่สามารถแยกแยะว่าอันไหนดีที่สุด (ถ้ามีอันที่ดีที่สุด) หรือสิ่งที่พวกเขาบ่งบอกถึงทั้งในบริบทของพวกเขา
คุณสามารถยกตัวอย่างให้ฉันดูได้จากที่หนึ่งอาจดีกว่าอันอื่นและทำไม