DDD: วัตถุที่ไม่เปลี่ยนรูปสามารถเป็นเอนทิตีได้หรือไม่


9

ฉันได้อ่านโพสต์นับไม่ถ้วนเกี่ยวกับความแตกต่างระหว่างเอนทิตีและออบเจ็กต์ค่าและในขณะที่ฉันคิดว่าอย่างน้อยที่สุดฉันเข้าใจว่าแนวคิดทั้งสองแตกต่างกันอย่างไรปรากฏว่าในผู้เขียนบทความบางคนพิจารณาว่า มีการเปลี่ยนรูป (ดังนั้นสถานะจะไม่เปลี่ยนแปลงอย่างน้อยภายในรูปแบบโดเมนนั้น)

คุณเห็นด้วยหรือไม่ว่าหากสถานะของวัตถุจะไม่เปลี่ยนแปลงภายในโมเดลโดเมนใด ๆ วัตถุนี้จะไม่เป็นนิติบุคคลหรือไม่ ทำไม?


ฉันต้องเรียนรู้ DDD บางอย่างเพื่อที่ฉันจะสามารถตอบคำถามเหล่านี้ได้อย่างชาญฉลาด ฉันสงสัยว่าความยากลำบากของนักพัฒนาซอฟต์แวร์จำนวนมากที่มีแนวคิดง่าย ๆ เช่นนี้เกิดจากความเข้าใจผิดที่ DDD เป็นวิธีการเขียนโปรแกรม
Robert Harvey

คำตอบ:


4

โดยหนังสือ (Evans, 2004), "วัตถุที่กำหนดไว้โดยตัวตนของมันถูกเรียกว่า ENTITY" คำจำกัดความนี้ไม่ขึ้นอยู่กับว่าวัตถุนั้นไม่แน่นอนหรือไม่เปลี่ยนรูป ฉันคิดว่ามันมีโอกาสน้อยกว่าที่วัตถุที่ไม่เปลี่ยนรูปจะเป็นนิติบุคคลในโดเมนที่กำหนดดังนั้นจึงเป็นประโยชน์อย่างมากสำหรับการตัดสินใจว่าวัตถุนั้นเป็น "ค่าวัตถุ" หรือ "เอนทิตี" แต่นั่นไม่ใช่ส่วนหนึ่งของคำนิยาม

ตัวอย่างเช่นสมมติว่าคุณมีหน่วยงานที่เป็นตัวแทนของพนักงานซึ่งอาจมีหรือไม่มีหัวหน้างานโดยตรง หากคุณตัดสินใจที่จะแสดงความคิดที่ว่าไม่มีหัวหน้างานโดยตรงเป็นการอ้างอิงไปยังวัตถุผู้ดูแล "ว่างเปล่า" วัตถุผู้ดูแล "null" จะถือว่าเป็นเอนทิตีอย่างสมเหตุสมผล และคุณอาจทำให้วัตถุ "ไร้ค่า" นี้ไม่เปลี่ยนรูป


1
+1 ผู้จัดการอาจอ่านได้อย่างเดียว (ไม่เปลี่ยนรูป) ในบริบทหรือโดเมนย่อยโดยเฉพาะ แต่นั่นไม่ได้หมายความว่าไม่มีตัวตน
Adrian Schneider

ยกโทษให้ฉันด้วยความหนาแน่น แต่ฉันไม่เข้าใจตัวอย่างหัวหน้างานของคุณอย่างสมบูรณ์ คุณกำลังบอกว่าในโดเมนเราจะมีสองแนวคิดที่เกี่ยวข้องกับหัวหน้างาน? แนวคิดหนึ่งจะเป็นตัวแทนของหัวหน้างานที่มีพนักงานที่ดูแล (ในรหัสแนวคิดนี้จะถูกนำไปใช้เป็นคลาสหัวหน้างานที่ไม่แน่นอน) ในขณะที่แนวคิดอื่น ๆ จะอธิบายหัวหน้างานที่ไม่ได้ควบคุมพนักงานใด ๆ (และแนวคิดนี้จะนำไปใช้ ?
bckpwrld

@bckpwrld ไม่เขาหมายถึงวัตถุ Nullแน่นอน
maaartinus

2

วิธีที่ฉันอ่านนี่คือวัตถุค่าเป็นวัตถุที่ไม่มีตัวตนและไม่มีอะไรเกี่ยวข้องกับการเปลี่ยนแปลงสถานะหรือไม่เปลี่ยนแปลง สิ่งนี้ทำให้ความแตกต่างระหว่างเอนทิตีและวัตถุค่าที่เอนทิตีมีคีย์หลักในขณะที่วัตถุค่าไม่; มันจะมีกุญแจต่างประเทศให้กับนิติบุคคลที่เป็นของมัน

http://lostechies.com/joeocampo/2007/04/23/a-discussion-on-domain-driven-design-value-objects/

ฉันยังคงสามารถเปลี่ยนคุณสมบัติของวัตถุค่าได้ แต่ไม่จำเป็นต้องระบุว่าเป็นอิสระจากเอนทิตีของมัน


ฉันผสมในคำศัพท์จากฐานข้อมูลเชิงสัมพันธ์ (คีย์หลัก) เป็นตัวตนเป็นอุปมาโปรดอย่านำไปที่แท้จริง
Kevin

เพื่อความเข้าใจของฉันอย่างน้อยแม้ว่าในรหัส VO จะแสดงด้วยประเภทที่ไม่แน่นอน (เช่นกรณีของประเภทนี้สามารถมีการแก้ไขคุณสมบัติของพวกเขา) แนวคิดแนวคิด VO เหล่านี้ยังคงไม่เปลี่ยนรูป ดังนั้นการเปลี่ยนคุณสมบัติของอินสแตนซ์ที่แสดงถึง VO เฉพาะหมายความว่าตอนนี้อินสแตนซ์เดียวกันนี้แสดงถึง VO อื่น กล่าวอีกนัยหนึ่ง VOs เป็นแนวคิดที่ไม่เปลี่ยนรูปแบบตลอดเวลา
bckpwrld
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.