Domain Driven Design (DDD) คืออะไร [ปิด]


276

ฉันเห็น DDD (การออกแบบการขับเคลื่อนด้วยโดเมน) ถูกใช้บ่อยๆในบทความ - ฉันได้อ่านรายการ Wikipedia เกี่ยวกับ DDD แต่ยังไม่สามารถเข้าใจได้ว่ามันคืออะไรจริง ๆ และฉันจะนำไปใช้ในการสร้างเว็บไซต์ของฉันได้อย่างไร

คำตอบ:


595

ประการแรกหากคุณไม่ทราบว่าคุณต้องการมันก็เป็นไปได้ที่คุณไม่ต้องการมัน หากคุณไม่รู้จักปัญหาที่ DDD แก้ไปบางทีคุณอาจไม่มีปัญหาเหล่านั้น แม้แต่ผู้สนับสนุน DDD มักจะชี้ให้เห็นว่า DDD นั้นมีไว้สำหรับโครงการขนาดใหญ่ (> 6 เดือน) เท่านั้น

สมมติว่าคุณยังอ่านอยู่ ณ จุดนี้การรับ DDD ของฉันคือ:

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

ระหว่างตัวคุณเองกับผู้เชี่ยวชาญด้านโดเมนคุณจะสร้างภาษาที่แพร่หลาย (UL) ซึ่งโดยทั่วไปจะเป็นคำอธิบายเกี่ยวกับแนวคิดของระบบ แนวคิดคือคุณควรจะสามารถจดบันทึกสิ่งที่ระบบทำในลักษณะที่ผู้เชี่ยวชาญด้านโดเมนสามารถอ่านและตรวจสอบว่าถูกต้อง ในตัวอย่างการเดิมพันของเราภาษาที่แพร่หลายจะรวมคำจำกัดความของคำเช่น 'race', 'bet', 'odds' และอื่น ๆ

แนวคิดที่อธิบายโดย UL จะเป็นพื้นฐานของการออกแบบเชิงวัตถุของคุณ DDD ให้คำแนะนำที่ชัดเจนเกี่ยวกับวิธีการที่วัตถุของคุณควรโต้ตอบและช่วยให้คุณแบ่งวัตถุของคุณออกเป็นหมวดหมู่ต่อไปนี้:

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

DDD ยังแนะนำหลายรูปแบบ:

  • Repositoryรูปแบบการคงอยู่ (การบันทึกและการโหลดข้อมูลของคุณโดยทั่วไปไปยัง / จากฐานข้อมูล)
  • Factoryเป็นรูปแบบการสร้างวัตถุ
  • บริการรูปแบบสำหรับการสร้างวัตถุที่จัดการกับวัตถุโดเมนหลักของคุณโดยไม่ต้องเป็นส่วนหนึ่งของโดเมน

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


33
ว้าว ... เป็นการตอบกลับที่ดีมาก! ชื่นชมมากและคำอธิบายที่ดีที่สุดที่ฉันได้อ่านทุกไมล์ ขอบคุณ .. ฉันจะดาวน์โหลดหนังสือเล่มนี้ในวันพรุ่งนี้
leen3o

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

6
พูดตามตรงแล้วมันฟังดูคล้ายกับทุกโครงการที่นักพัฒนาทำงานร่วมกับสถาปนิกมานานกว่าหนึ่งเดือน (อย่างน้อยก็ตามประสบการณ์ของฉันอย่างน้อย) การตระหนักว่าอะไรทำให้ฉันขอบคุณคำตอบของคุณมากยิ่งขึ้น :)
Jaroslav Záruba

4
ฉันไม่เห็นด้วยกับข้อความที่ว่า DDD "มีไว้สำหรับโครงการขนาดใหญ่เท่านั้น" DDD เป็นอะไรที่คุณต้องทำอย่างเต็มที่หรือไม่เลย คุณสามารถทำแนวปฏิบัติบางอย่างจาก DDD ตัวอย่างเช่นคุณสามารถทำ "ค่าวัตถุ" และ "ภาษาที่แพร่หลาย" และไม่รวมรากในโครงการขนาดเล็ก
EasterBunnyBugSmasher

6
อย่างไรก็ตามเราไม่ได้ทำการวิเคราะห์โดเมนสำหรับทุกโครงการที่เราทำหรือสร้างโมเดล เราไม่ได้ไม่เคยจบบทสนทนาในฐานะ BA กับลูกค้าและ SME เพื่อเข้าใจขอบเขตและขอบเขตของโครงการ ฉันยังไม่เข้าใจว่าอะไรคือสิ่งที่โดดเด่นเป็นพิเศษใน DDD ดังนั้นโครงการพัฒนาซอฟต์แวร์อื่น ๆ
ซูเปอร์โนวา

51

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

คุณสามารถอ่านเพิ่มเติมในหนังสือเอริคอีแวนส์


5
มีเวอร์ชั่นสั้นของหนังสือเอริคอีแวนส์เป็นใช้ได้ฟรี
troelskn

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

3
แต่ใครจะเริ่มด้วยการออกแบบรูปแบบโดยสุจริต? หลักสูตรการศึกษาที่มีเกียรติจะผ่านการวิเคราะห์การออกแบบและการสร้างแบบจำลองตามความต้องการทางธุรกิจ ฉันไม่ได้รับอะไรใหม่เกี่ยวกับเทคนิคนี้
Sebas

6
ฉันเช่นกันนี่เป็นเพียงการออกแบบเชิงวัตถุที่ทุกคนใช้ก่อนที่แนวคิดนี้จะมา ฉันไม่เห็นสิ่งประดิษฐ์ใหม่ที่นี่
Ronen Festinger

2
@RonenFestinger โปรดอย่าตัดสิน DDD โดยคำตอบนี้เท่านั้น มีข้อมูลเชิงลึกมากมายในหนังสือของ Eric Evans ตัวอย่างบริบทที่ถูกผูกไว้ กระบวนทัศน์บริบทที่ถูกผูกไว้เป็นหนึ่งในเสาหลักของบริการขนาดเล็กที่เรากำลังสร้างในวันนี้ การอ่านหนังสือยังช่วยให้คุณเข้าใจไมโครไซต์ด้วย
Kerem Baydoğan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.