การพัฒนาโดเมนขับเคลื่อนในแง่การปฏิบัติคืออะไร? [ปิด]


24

ฉันได้ยินเกี่ยวกับ Domain Driven Development จากผู้พัฒนาในพื้นที่ เขาพูดถึงมันเหมือนเป็นเรื่องเกี่ยวกับกระสุนเงินกับความต้องการที่เปลี่ยนแปลง

ผมอ่านวิกิพีเดีย ยังไม่ชัดเจนเกินไป "3D" ในแง่การปฏิบัติคืออะไร? น่าทึ่งจริง ๆ ที่ตอนนี้การสร้างไดอะแกรมคลาส UML ล้าสมัยไปแล้วหรือ

คำตอบ:


29

ก่อนอื่นฉันไม่คิดว่าบทความ Wikipedia ที่คุณอ้างถึงนั้นดีมากส่วนใหญ่เป็นเพราะมันอ้างถึงสิ่งต่าง ๆ ที่เป็นส่วนเสริมของ Domain Driven Design และไม่ได้สอนใครเกี่ยวกับการฝึกฝน

แต่ในฐานะที่เป็นคนที่ใช้ Domain Driven Design มาเป็นหัวใจ (ซึ่งโดยปกติจะเป็น DDD มากกว่า 3D สำหรับสิ่งที่คุ้มค่า) ฉันมักจะรู้สึกถึงพื้นฐานของ DDD ชัดเจนถ้าคุณอ่านบทแรกของ Eric หนังสือของอีแวนส์ แต่มันเป็นชุดของรูปแบบและวิธีปฏิบัติดังนั้นจึงไม่ใช่เรื่องง่ายที่จะสรุปโดยย่อ 3 ประโยคว่ามันคืออะไรและข้อดีคืออะไรโดยไม่ต้องลงรายละเอียด รายละเอียดใดที่สะท้อนกับบุคคลใดบุคคลหนึ่งอาจแตกต่างกันมากเช่นกัน เป็นไปได้ที่ 10 ปีที่แล้วฉันจะไม่เห็นจุดนี้เลย

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

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

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

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


6

คำอธิบายระดับสูงอาจเป็น -

ทำโมเดลคลาสของคุณเพื่อทำมิเรอร์โครงสร้างข้อมูลและพฤติกรรมของโดเมนปัญหาของคุณ

สิ่งนี้ช่วยให้คุณแมปการเปลี่ยนแปลงในโดเมนปัญหาของคุณโดยตรงกับการเปลี่ยนแปลงในรหัสของคุณดังนั้นควรอัปเดตได้ง่ายขึ้นเมื่อโดเมนปัญหาของคุณวิวัฒนาการ


2

การปฏิเสธความรับผิด: ฉันได้เพิ่มคำตอบนี้หลังจากคำถามถูกทำเครื่องหมายว่าซ้ำกัน ฉันไม่เห็นด้วย แต่ที่นี่เรา :-)

การออกแบบที่ขับเคลื่อนด้วยโดเมนมีวัตถุประสงค์เพื่อออกแบบซอฟต์แวร์ในโดเมนที่มีมูลค่าสูง / ซับซ้อนสูง

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

  • เพราะคุณจะได้เรียนรู้ไปพร้อมกัน
  • เพราะผู้มีส่วนได้เสียจะไม่บอกความจริงทั้งหมดในภาพเดียว
  • เพราะโดเมนจะมีวิวัฒนาการไปพร้อมกัน

หรือการรวมกันของทั้งสอง

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

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

  1. การครอบงำจิตใจด้วยภาษาเป็นวิธีการค้นพบความแตกต่างที่ซ่อนอยู่
  2. มุ่งเน้นไปที่มุมมองภาพใหญ่เพื่อให้สามารถส่งมอบสิ่งที่ยอดเยี่ยม
  3. การอยู่ร่วมกันของแบบจำลองที่ง่ายกว่ามากแทนที่จะเป็นแบบที่มีขนาดใหญ่กว่า
  4. เน้นการสร้างแบบจำลองความร่วมมือกับผู้เชี่ยวชาญด้านโดเมนและในทีมพัฒนา
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.