Domain-Driven Design (DDD) EP.0 แนวคิดของการทำ “DDD”

SUWAN KHP.
odds.team
Published in
1 min readSep 7, 2023

Series Domain-Driven Design (DDD)

EP.0 บทนำ : แนวคิดของการทำ “Domain-Driven Design (DDD)”

Learning Domain-Driven Design: Aligning Software Architecture and Business Strategy

Domain-driven design (DDD) ได้เสนอแนวทางปฏิบัติ สำหรับการทำงานร่วมกันในการสร้างซอฟต์แวร์ จากมุมมองของธุรกิจ

นั่นคือ “Domain” และ “ Problems ที่เรากำหนดไว้ ”

ซึ่ง DDD จะเข้ามาจัดการกับความซับซ้อน และเป็นการเตรียมความพร้อมสู่ความชัดเจนในการพัฒนาซอฟต์แวร์ และนั้นคือเป้าหมายของ “Domain-Driven Design (DDD)”

โดย “Domain-Driven Design (DDD)” นั้นมีแนวคิดดีๆ มากมายที่สามารถนำไปปรับใช้กับการพัฒนาซอฟต์แวร์ แม้โปรเจคที่มีความซับซ้อนน้อย ก็สามารถนำแนวคิดนี้ไปปรับใช้ในโปรเจคสำหรับการพัฒนาซอฟต์แวร์ได้

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

“strategic design(การออกแบบเชิงกลยุทธ์)” ยังสามารถที่จะแยกย่อยปัญหาออกเป็นปัญหาเล็กๆ เพื่อที่แก้ไข และเชื่อมโยงปัญหาเล็กๆ เหล่านั้นเข้าด้วยกันได้

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

โดยพื้นฐานของการพัฒนาซอฟต์แวร์ที่ใช้ DDD คือ “strategic design(การออกแบบเชิงกลยุทธ์)” โดยเราได้เปลี่ยนจาก “strategic design” เป็น Software Architecture และ Implementation อีกครั้ง ซึ่ง DDD นั้นได้ให้คำแนะนำ และรูปแบบสำหรับการจัดระเบียบ Domain อีกทั้งยังสามารถหลีกเลี่ยงความซับซ้อนที่จะเกิดเพิ่มเติมได้อีกด้วย

“strategic design(การออกแบบเชิงกลยุทธ์)” ยังคงเป็นสิ่งที่จำเป็นสำหรับผู้เชี่ยวชาญด้าน Domain ที่จะจดจำภาษา Domain ของตัวเอง แม้ว่าเขาจะดูโค้ดที่สร้างโดยทีมนักพัฒนาซอฟต์แวร์ก็ตาม

ในช่วงหลายปีที่ผ่านมานับตั้งแต่การตีพิมพ์ “The Blue Book” ไม่เพียงแต่มีองค์กรจำนวนมากที่ได้รับประโยชน์จากแนวคิดนี้เท่านั้น แต่กลุ่มคนที่ใช้แนวคิดของ DDD ในการทำงานจริงต่างก็ได้รับประสบการณ์ และได้พัฒนาขึ้นอีกด้วย และลักษณะการทำงานร่วมกันของ DDD ส่งผลให้ชุมชนชาว DDD ได้มีการแบ่งปันประสบการณ์และมุมมอง พวกเขาได้สร้างเครื่องมือเพื่อช่วยให้ทีมได้รับประโยชน์จากแนวคิดเหล่านี้ ใน keynote session ที่ Explore DDD ในปี 2019 โดย Eric Evans

Learning Domain-Driven Design ในหนังสือเล่มนี้เขาเล่าว่า

“เรื่องราว” ของ DDD (ไม่ใช่ประวัติศาสตร์ แต่เป็นแนวคิด) ในรูปแบบที่ไม่เหมือนใคร และมอบมุมมองที่ยอดเยี่ยมสำหรับการเรียนรู้ ไม่ว่าจะเป็นคนที่อยู่ในวงการ DDD มานาน หรือแม้กระทั้งมือใหม่ที่อยากเริ่มเรียนรู้เกี่ยวกับ DDD เองก็ตาม

โดยส่วนหลังของหนังสือนั้นได้แบ่งปันแนวทางปฏิบัติที่สำคัญบางอย่างที่พัฒนามาจาก DDD เช่น Event-Storming เพื่อจัดการกับปัญหาการพัฒนาซอฟต์แวร์ในมุมมองทางธุรกิจ หรือองค์กร ที่ส่งผลกระทบกับซอฟต์แวร์ และยังอธิบายอีกว่า DDD นั้นสอดคล้องกับ Microservices ยังไง และวิธีที่ตัวคุณเองสามารถ Integrate ด้วยรูปแบบ well-known software patterns ซึ่งผมเองก็คิดว่าการเรียนรู้ Domain-Driven Design จะเป็นการแนะนำ DDD ที่ยอดเยี่ยมสำหรับผู้มาใหม่ และคุ้มค่าแก่การอ่านสำหรับผู้ปฏิบัติงานที่มีประสบการณ์อย่างแน่นอนครับบบ

EPISODE ต่อไป…

เดี๋ยวมารู้จักกับ Business Domain และ Subdomain ว่ามันคืออะไรกันแน่ (เร็วๆ นี้) ✨

Book Ref: Learning Domain-Driven Design: Aligning Software Architecture and Business Strategy

--

--