ฉันเข้าสู่แนวคิดเกี่ยวกับการออกแบบที่ขับเคลื่อนด้วยโดเมน (DDD) และพบหลักการบางอย่างที่แปลกประหลาดโดยเฉพาะอย่างยิ่งเกี่ยวกับการแยกโดเมนและรูปแบบการคงอยู่ นี่คือความเข้าใจพื้นฐานของฉัน:
- บริการบนชั้นแอปพลิเคชัน (จัดเตรียมชุดคุณสมบัติ) ร้องขอวัตถุโดเมนจากที่เก็บที่จำเป็นต้องใช้เพื่อทำหน้าที่ของมัน
- การนำไปใช้อย่างเป็นรูปธรรมของที่เก็บนี้ดึงข้อมูลจากที่เก็บข้อมูลที่ถูกนำไปใช้
- บริการบอกวัตถุโดเมนซึ่งสรุปทางตรรกะทางธุรกิจเพื่อดำเนินงานบางอย่างที่แก้ไขสถานะของมัน
- บริการบอกที่เก็บเพื่อคงออบเจ็กต์โดเมนที่ถูกแก้ไข
- ที่เก็บข้อมูลจำเป็นต้องแมปวัตถุโดเมนกลับไปเป็นตัวแทนที่สอดคล้องกันในการจัดเก็บ
ตอนนี้จากข้อสมมติข้างต้น
โฆษณา 2:
ดูเหมือนว่าแบบจำลองโดเมนจะโหลดวัตถุโดเมนทั้งหมด (รวมถึงเขตข้อมูลและการอ้างอิงทั้งหมด) แม้ว่าจะไม่จำเป็นสำหรับฟังก์ชันที่ร้องขอก็ตาม การโหลดอาจไม่สามารถทำได้หากมีการอ้างอิงวัตถุโดเมนอื่นเว้นแต่คุณจะโหลดวัตถุโดเมนเหล่านั้นด้วยและวัตถุทั้งหมดที่อ้างอิงในทางกลับกันเป็นต้น การโหลด Lazy คำนึงถึงซึ่งหมายความว่าคุณเริ่มทำการค้นหาวัตถุโดเมนของคุณซึ่งควรจะเป็นความรับผิดชอบของที่เก็บในตอนแรก
เมื่อพิจารณาถึงปัญหานี้ดูเหมือนว่าวิธีการโหลดวัตถุโดเมนที่ถูกต้องจะมีฟังก์ชันการโหลดเฉพาะสำหรับแต่ละกรณีการใช้งาน ฟังก์ชั่นเฉพาะเหล่านี้จะโหลดข้อมูลที่จำเป็นโดยกรณีการใช้งานที่ถูกออกแบบมาเท่านั้น นี่คือสิ่งที่น่าอึดอัดใจที่เข้ามาเล่น: อย่างแรกฉันจะต้องรักษาจำนวนมากของการโหลดฟังก์ชั่นสำหรับแต่ละการใช้งานของพื้นที่เก็บข้อมูลและวัตถุโดเมนจะจบลงในรัฐที่ไม่สมบูรณ์ที่ดำเนินการnull
ในสาขาของพวกเขา ในทางเทคนิคหลังควรจะไม่มีปัญหาเพราะถ้าไม่ได้โหลดค่ามันไม่ควรจะจำเป็นต้องใช้ฟังก์ชั่นที่ร้องขอมันต่อไป ถึงกระนั้นมันก็น่าอึดอัดใจและอาจเป็นอันตรายได้
โฆษณา 3:
วัตถุโดเมนจะตรวจสอบข้อ จำกัด ที่ไม่ซ้ำกันอย่างไรเมื่อการก่อสร้างถ้ามันไม่มีความคิดใด ๆ ของพื้นที่เก็บข้อมูล? ตัวอย่างเช่นถ้าฉันต้องการสร้างใหม่User
ด้วยหมายเลขประกันสังคมที่ไม่ซ้ำกัน (ซึ่งได้รับ) ความขัดแย้งที่เร็วที่สุดจะเกิดขึ้นเมื่อขอให้พื้นที่เก็บข้อมูลบันทึกวัตถุเฉพาะในกรณีที่มีข้อ จำกัด ที่ไม่ซ้ำกันที่กำหนดไว้ในฐานข้อมูล มิฉะนั้นฉันสามารถหา a ที่User
มีประกันสังคมที่กำหนดและรายงานข้อผิดพลาดในกรณีที่มันมีอยู่ก่อนที่จะสร้างใหม่ แต่จากนั้นการตรวจสอบข้อ จำกัด จะอาศัยอยู่ในบริการไม่ใช่ในวัตถุโดเมนที่เป็นของพวกเขา ฉันเพิ่งรู้ว่าวัตถุโดเมนได้รับอนุญาตเป็นอย่างดีในการใช้ที่เก็บ (ฉีด) สำหรับการตรวจสอบ
โฆษณา 5:
ฉันรับรู้การแมปของวัตถุโดเมนกับแบ็กเอนด์ที่จัดเก็บข้อมูลเป็นกระบวนการที่ใช้งานมากเมื่อเปรียบเทียบกับการให้วัตถุโดเมนแก้ไขข้อมูลที่อยู่ภายใต้การซ้อนโดยตรง แน่นอนว่าเป็นข้อกำหนดเบื้องต้นที่จำเป็นในการแยกการดำเนินการจัดเก็บข้อมูลที่เป็นรูปธรรมจากรหัสโดเมน อย่างไรก็ตามมันมีค่าใช้จ่ายสูงเช่นนี้หรือไม่?
เห็นได้ชัดว่าคุณมีตัวเลือกในการใช้เครื่องมือ ORM เพื่อทำแผนที่สำหรับคุณ สิ่งเหล่านี้มักจะทำให้คุณต้องออกแบบโมเดลโดเมนตามข้อ จำกัด ของ ORM หรือแม้แต่แนะนำการพึ่งพาจากโดเมนถึงเลเยอร์โครงสร้างพื้นฐาน (โดยใช้คำอธิบายประกอบ ORM ในวัตถุโดเมนเป็นต้น) นอกจากนี้ฉันได้อ่าน ORMs แนะนำค่าใช้จ่ายในการคำนวณจำนวนมาก
ในกรณีของฐานข้อมูล NoSQL สำหรับที่แทบจะไม่ได้ออมเหมือนแนวคิดที่มีอยู่อย่างไรคุณติดตามซึ่งคุณสมบัติการเปลี่ยนแปลงในรูปแบบโดเมนเมื่อsave()
?
แก้ไข : นอกจากนี้เพื่อให้ที่เก็บเข้าถึงสถานะของวัตถุโดเมน (เช่นค่าของแต่ละฟิลด์) วัตถุโดเมนจะต้องเปิดเผยสถานะภายในซึ่งแบ่งการห่อหุ้ม
โดยทั่วไป:
- ตรรกะการทำธุรกรรมจะไปที่ไหน นี่คือความเพียรที่เฉพาะเจาะจงอย่างแน่นอน โครงสร้างพื้นฐานการจัดเก็บบางอย่างอาจไม่สนับสนุนธุรกรรมเลย (เช่นที่เก็บจำลองในหน่วยความจำ)
- สำหรับการดำเนินการจำนวนมากที่ปรับเปลี่ยนวัตถุหลาย ๆ ตัวฉันต้องโหลดแก้ไขและจัดเก็บแต่ละวัตถุแยกกันเพื่อให้ผ่านตรรกะการตรวจสอบความถูกต้องของวัตถุ ซึ่งตรงข้ามกับการดำเนินการค้นหาเดี่ยวโดยตรงไปยังฐานข้อมูล
ฉันขอขอบคุณการชี้แจงในหัวข้อนี้ สมมติฐานของฉันถูกต้องหรือไม่ หากไม่เป็นวิธีที่ถูกต้องในการแก้ปัญหาเหล่านี้คืออะไร?