EP.1 Domain Driven Design & Microservices for Architects

Chiwa Kantawong (Pea)
1 min readJan 24, 2025

--

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

ในบทนี้, เราจะพาทุกคนไปรู้จักกับ Domain-Driven Design (DDD) ซึ่งเป็นแนวทางการออกแบบซอฟต์แวร์ที่มุ่งเน้นที่การเข้าใจ โดเมนของธุรกิจ และการแยกความรับผิดชอบของระบบออกเป็นบริการย่อยๆ ที่เรียกว่า Microservices โดยเน้นการทำงานร่วมกันของทีมและการพัฒนาแบบยืดหยุ่น.

Domain-Driven Design (DDD) คืออะไร?

Domain-Driven Design (DDD) เป็นแนวทางการออกแบบซอฟต์แวร์ที่มุ่งเน้นการแก้ปัญหาในธุรกิจ (Business Domain) โดยการทำความเข้าใจสิ่งที่สำคัญในธุรกิจนั้นๆ และจัดการให้โปรแกรมและระบบที่พัฒนามีการเชื่อมโยงกับการทำงานของธุรกิจจริงๆ โดยใช้ภาษาเดียวกันกับทีมที่ทำงานในธุรกิจ.

เหตุผลในการใช้ DDD คือ:

1. การเข้าใจธุรกิจ: ทีมพัฒนาสามารถเข้าใจความต้องการของธุรกิจได้ดีขึ้น เพราะมุ่งเน้นที่การเข้าใจ Domain ของธุรกิจนั้นๆ โดยการใช้ Ubiquitous Language หรือภาษาที่ทีมพัฒนาและทีมธุรกิจใช้เหมือนกัน

2. การแบ่งแยกขอบเขต (Bounded Contexts): ด้วย DDD เราสามารถแบ่งระบบออกเป็นหลายๆ บริเวณ (Bounded Contexts) ที่มีขอบเขตและความรับผิดชอบชัดเจน

Microservices และการออกแบบในแบบ DDD

Microservices เป็นสถาปัตยกรรมที่เน้นการแยกระบบใหญ่ๆ ออกเป็น บริการย่อยๆ (บริการแต่ละตัวจะทำงานได้โดยอิสระ) ซึ่งบริการเหล่านี้จะสื่อสารกันผ่าน API หรือข้อความต่างๆ เช่น Kafka หรือ RESTful APIs.

เมื่อทำงานกับ Microservices, การใช้ DDD จะช่วยให้เราเข้าใจและออกแบบบริการที่แยกออกจากกันได้อย่างมีระเบียบ ซึ่งสามารถนำไปใช้ในการพัฒนาแอปพลิเคชันขนาดใหญ่ได้ง่ายและยืดหยุ่นมากขึ้น.

เทคนิคสำคัญในการออกแบบ Microservices ด้วย DDD

1. Event Storming: เทคนิคที่ใช้ในการรวบรวมความรู้จากทุกภาคส่วนในทีม เพื่อทำความเข้าใจถึงธุรกิจที่เราจะพัฒนา โดยใช้การทำงานร่วมกันระหว่างทีมและการระดมสมอง (Brainstorming) เพื่อให้ได้ภาพรวมที่ชัดเจนของ Domain

2. Bounded Contexts: การแบ่งระบบออกเป็นหลายๆ บริเวณที่มีขอบเขตแยกกัน (เช่น ระบบผู้ใช้ ระบบการชำระเงิน) ซึ่งแต่ละบริการใน Bounded Context จะเป็นอิสระและมีความรับผิดชอบที่ชัดเจน

สิ่งที่คุณจะได้เรียนรู้จากบทความต่อ ๆ ไป

การออกแบบและสร้าง Microservices Application: การออกแบบที่ใช้หลักการ DDD สำหรับการพัฒนาแอปพลิเคชันที่มีความซับซ้อน

การออกแบบด้วย Design Patterns: เทคนิคต่างๆ ที่ใช้ใน Microservices และ Distributed Systems เพื่อเพิ่มความเสถียรและประสิทธิภาพ

การใช้ Event-Driven Architecture: การออกแบบระบบให้สามารถรองรับ Event และการกระจายข้อมูลในแบบ Real-time

การพัฒนา API สำหรับ Microservices: วิธีการสร้าง API ที่สามารถทำงานได้อย่างมีประสิทธิภาพในระบบ Microservices

คอร์สนี้จะช่วยให้คุณมีความเข้าใจและสามารถใช้ DDD และ Microservices ในการออกแบบระบบที่รองรับความซับซ้อนในระดับธุรกิจได้ และยังช่วยให้คุณสามารถพัฒนาบริการแบบ Event-Driven Architecture ที่สามารถรองรับการขยายตัวในอนาคต.

สรุป

ใน EP1 นี้, เราได้เรียนรู้ถึงการใช้ Domain-Driven Design (DDD) และ Microservices เพื่อลดความซับซ้อนของการพัฒนาแอปพลิเคชันที่มีการเปลี่ยนแปลงอยู่ตลอดเวลา โดยการแยกแยะขอบเขตของระบบและทำให้สามารถพัฒนาบริการที่อิสระจากกันได้ง่ายขึ้น เมื่อศึกษา DDD อย่างลึกซึ้งร่วมกับ Microservices เราจะสามารถพัฒนาระบบที่ยืดหยุ่นและสามารถปรับขยายได้ตามความต้องการของธุรกิจ.

--

--

Chiwa Kantawong (Pea)
Chiwa Kantawong (Pea)

Written by Chiwa Kantawong (Pea)

Software Development Expert at Central Tech

Responses (1)