บทเรียนจำนวนมากเกี่ยวกับ DDD ที่ฉันศึกษาส่วนใหญ่จะครอบคลุมทฤษฎี พวกเขาทั้งหมดมีตัวอย่างรหัสพื้นฐาน (Pluralsight และคล้ายคลึงกัน)
บางคนพยายามสร้างบทเรียนที่ครอบคลุม DDD ด้วย EF บนเว็บ หากคุณเริ่มศึกษาพวกเขาเพียงชั่วครู่ - คุณสังเกตได้อย่างรวดเร็วว่าพวกเขาแตกต่างกันมาก บางคนแนะนำให้แอพพลิเคชั่นมีน้อยที่สุดและเพื่อหลีกเลี่ยงการแนะนำเลเยอร์เพิ่มเติมเช่นที่เก็บข้อมูลด้านบนของ EFคนอื่น ๆ กำลังสร้างเลเยอร์เพิ่มเติมอย่างแน่นอนซึ่งมักจะละเมิด SRP ด้วยการฉีดDbContext
เข้าไปใน Aggregate Roots
ฉันขอโทษอย่างมากถ้าฉันถามคำถามตามความคิดเห็น แต่ ...
เมื่อมาถึงการปฏิบัติ - Entity Framework เป็นหนึ่งใน ORMs ที่ทรงพลังและใช้กันอย่างแพร่หลาย คุณจะไม่พบหลักสูตรที่ครอบคลุมที่ครอบคลุม DDD ด้วยโชคไม่ดี
ประเด็นสำคัญ:
Entity Framework นำ UoW & Repository (
DbSet
) ออกจากกล่องรุ่นของคุณกับ EF มีคุณสมบัติการนำทาง
กับ EF ทุกรุ่นของยี่ห้อมักจะใช้ได้ปิด
DbContext
(พวกเขาจะแสดงเป็นDbSet
)
ผิดพลาด:
คุณไม่สามารถรับประกันได้ว่ารุ่นลูกของคุณจะได้รับผลกระทบผ่านทาง Aggregate Root เท่านั้นโมเดลของคุณมีคุณสมบัติการนำทางและเป็นไปได้ที่จะแก้ไขและเรียกใช้
dbContext.SaveChanges()
ด้วย
DbContext
คุณสามารถเข้าถึงทุกรุ่นของคุณดังนั้นหลีกเลี่ยง Aggregate Rootคุณสามารถ จำกัด การเข้าถึงเด็กวัตถุรากผ่านทาง
ModelBuilder
ในOnModelCreating
วิธีการโดยการทำเครื่องหมายพวกเขาเป็นทุ่งนา - ผมก็ยังไม่เชื่อว่ามันเป็นวิธีที่จะไปเกี่ยวกับ DDD บวกมันยากที่จะประเมินสิ่งที่ชนิดของการผจญภัยนี้อาจนำไปสู่ในอนาคต ( ค่อนข้างสงสัย )
ความขัดแย้ง:
หากไม่มีการใช้พื้นที่เก็บข้อมูลอีกชั้นหนึ่งซึ่งส่งคืนผลรวมเราไม่สามารถแก้ไขข้อผิดพลาดที่กล่าวข้างต้นได้บางส่วน
ด้วยการนำพื้นที่เก็บข้อมูลชั้นพิเศษมาใช้ทำให้เราไม่ต้องสนใจคุณสมบัติที่มีอยู่ในตัวของ EF (ทุกอย่าง
DbSet
เป็น repo อยู่แล้ว) และแอพที่ซับซ้อนเกินความจำเป็น
บทสรุปของฉัน:
โปรดให้อภัยฉันไม่รู้ แต่อยู่บนพื้นฐานของข้อมูลดังกล่าวข้างต้น - มันทั้ง Entity Framework อาจจะไม่เพียงพอสำหรับโดเมนที่ขับเคลื่อนด้วยการออกแบบหรือการออกแบบโดเมนขับเคลื่อนเป็นที่ไม่สมบูรณ์และล้าสมัยวิธี
ฉันสงสัยว่าแต่ละวิธีมีข้อดี แต่ตอนนี้ฉันหลงทางไปแล้วและไม่มีความคิดเพียงเล็กน้อยเกี่ยวกับวิธีการกระทบยอด EF กับ DDD
ถ้าฉันผิด - อย่างน้อยใครก็สามารถอธิบายรายละเอียดของชุดคำสั่งง่ายๆ (หรือให้ตัวอย่างรหัสที่เหมาะสม) ว่าจะไปเกี่ยวกับ DDD กับ EF ได้ไหม?