ฉันมาจากโลกแห่งสคริปต์การทำธุรกรรมและฉันเพิ่งเริ่มดู DDD ฉันไม่แน่ใจในวิธีที่ถูกต้องในการรวมการออกแบบ DDD กับการคงอยู่ของฐานข้อมูล นี่คือสิ่งที่ฉันมี:
คลาสเซอร์วิสชื่อ OrganisationService ซึ่งอินเตอร์เฟสมีเมธอดสำหรับการดึงและบันทึกอินสแตนซ์ของอ็อบเจ็กต์โดเมนองค์กร องค์กรเป็นรูทรวมและมีข้อมูลอื่น ๆ ที่เกี่ยวข้อง: สมาชิกและใบอนุญาต ฐานข้อมูล EF6 ก่อน DBContext จะใช้ภายใน OrganisationService เพื่อดึงหน่วยงาน OrganisationDB และหน่วยงาน MemberDB และ LicenseDB ที่เกี่ยวข้อง สิ่งเหล่านี้ทั้งหมดได้รับการแปรสภาพเป็นคลาสอ็อบเจ็กต์โดเมนเทียบเท่าเมื่อดึงข้อมูลโดย OrganisationService และโหลดลงในวัตถุโดเมนองค์กร วัตถุนี้ดูเหมือนว่า:
public class Organisation
{
public IList<Member> Members { get; set; }
public IList<License> Licenses { get; set; }
}
ฉันไม่ได้ใช้รูปแบบพื้นที่เก็บข้อมูลใน OrganisationService ... ฉันใช้ EF เป็นพื้นที่เก็บข้อมูลเนื่องจากดูเหมือนว่า EF6 ได้ทำให้พื้นที่เก็บข้อมูลซ้ำซ้อนในขณะนี้
ณ จุดนี้ในการออกแบบวัตถุโดเมนองค์กรเป็นโลหิตจางดูเหมือนว่าระดับองค์กร EF POCO คลาส OrganisationService มีลักษณะเหมือน Repository มาก!
ตอนนี้ฉันต้องเริ่มเพิ่มตรรกะ ตรรกะนี้รวมถึงการจัดการสิทธิ์ใช้งานองค์กรและสมาชิก ตอนนี้ในธุรกรรมสคริปต์วันฉันจะเพิ่มวิธีการใน OrganisationService สำหรับการจัดการการดำเนินงานเหล่านี้และเรียกร้องให้เป็นพื้นที่เก็บข้อมูลเพื่อโต้ตอบกับฐานข้อมูล แต่ด้วย DDD ฉันเชื่อว่าตรรกะนี้ควรจะถูกห่อหุ้มภายในวัตถุโดเมนองค์กรเอง ...
นี่คือที่ฉันไม่แน่ใจในสิ่งที่ฉันควรทำ: ฉันจะต้องยืนยันข้อมูลนี้กลับไปยังฐานข้อมูลเป็นส่วนหนึ่งของตรรกะ หมายความว่าฉันควรใช้ DbContext ภายในวัตถุโดเมนองค์กรเพื่อทำสิ่งนี้หรือไม่ การใช้พื้นที่เก็บข้อมูล / EF ภายในโดเมนปฏิบัติไม่ดีวัตถุ? ถ้าเป็นเช่นนั้นความเพียรนี้อยู่ที่ไหน
public class Organisation
{
public IList<Member> Members { get; set; }
public IList<License> Licenses { get; set; }
public void AddLicensesToOrganisation(IList<License> licensesToAdd)
{
// Do validation/other stuff/
// And now Save to the DB???
using(var context = new EFContext())
{
context.Licenses.Add(...
}
// Add to the Licenses collection in Memory
Licenses.AddRange(licensesToAdd);
}
}
ฉันควรจะกลายพันธุ์วัตถุโดเมนองค์กรในหน่วยความจำและจากนั้นดันกลับไปที่ OrganisationService เพื่อคงอยู่? จากนั้นฉันต้องติดตามสิ่งที่เปลี่ยนแปลงจริงบนวัตถุ (ซึ่งเป็นสิ่งที่ EF ทำกับ POCO ของตัวเอง! ฉันรู้สึกว่า EF ไม่ได้เป็นเพียงการเปลี่ยนพื้นที่เก็บข้อมูล แต่อาจเป็นเลเยอร์โดเมน!)
คำแนะนำใด ๆ ที่นี่ชื่นชม