ฉันใช้วิธีที่คล้ายกับ DDD สำหรับโมดูลกรีนฟิลด์ของแอปพลิเคชันที่มีอยู่ ไม่ใช่ DDD 100% เนื่องจากสถาปัตยกรรม แต่ฉันพยายามใช้แนวคิด DDD บางอย่าง ฉันมีบริบท จำกัด (ผมคิดว่าเป็นระยะที่เหมาะสม - ฉันยังคงเรียนรู้เกี่ยวกับ DDD) ประกอบด้วยสองหน่วยงาน: และConversation
Message
การสนทนาเป็นรากฐานเนื่องจากข้อความไม่มีอยู่โดยไม่มีการสนทนาและข้อความทั้งหมดในระบบเป็นส่วนหนึ่งของการสนทนา
ฉันมีConversationRepository
ชั้นเรียน (แม้ว่าจะเป็นเหมือนเกตเวย์จริงๆแล้วฉันใช้คำว่า "พื้นที่เก็บข้อมูล") ซึ่งค้นหาบทสนทนาในฐานข้อมูล เมื่อพบการสนทนาและยังสร้าง (ผ่านทางโรงงาน) รายการข้อความสำหรับการสนทนานั้น (เปิดเผยเป็นคุณสมบัติ) นี่ดูเหมือนจะเป็นวิธีที่ถูกต้องในการจัดการสิ่งต่าง ๆ เนื่องจากไม่จำเป็นต้องมีMessageRepository
คลาสที่เต็มไปด้วยลมหายใจเนื่องจากมีอยู่เฉพาะเมื่อมีการสนทนาเท่านั้น
อย่างไรก็ตามเมื่อพูดถึงการบันทึกข้อความนี่เป็นความรับผิดชอบของ ConversationRepository เนื่องจากเป็นรากรวมของข้อความหรือไม่ สิ่งที่ฉันหมายถึงคือฉันควรมีวิธีการใน ConversationRepository เรียกว่าพูดAddMessage
ที่ใช้ข้อความเป็นพารามิเตอร์และบันทึกไว้ในฐานข้อมูลหรือไม่ หรือฉันควรจะมีที่เก็บแยกต่างหากสำหรับการค้นหา / บันทึกข้อความ? ดูเหมือนว่าเหตุผลจะเป็นหนึ่งที่เก็บต่อหน่วย แต่ฉันก็ได้ยิน "หนึ่งที่เก็บต่อบริบท"