ตอนที่ 10: Layered, Clean และ Hexagonal Architecture – โครงสร้างที่พา DDD ไปใช้ได้จริง

บทนำ

เมื่อคุณเข้าใจ Domain-Driven Design ครบทั้ง Entity, Aggregate, Domain Service, Application Service, Repository และ Domain Event แล้ว

คำถามถัดไปที่เลี่ยงไม่ได้คือ:

แล้วเราควรจัดโครงสร้างระบบ (Architecture) แบบไหน ถึงจะทำให้ DDD ใช้งานได้จริงในระยะยาว?

บทความตอนนี้จะพาคุณทำความเข้าใจความสัมพันธ์ระหว่าง DDD กับสถาปัตยกรรมยอดนิยม 3 แบบ:

  • Layered Architecture
  • Clean Architecture
  • Hexagonal Architecture

โดยอธิบายผ่านมุมมอง ระบบธุรกิจ / ระบบพนักงาน เช่นเดิม


DDD ไม่ใช่ Architecture แต่ต้องพึ่ง Architecture

สิ่งสำคัญที่ต้องเข้าใจก่อนคือ:

  • DDD ไม่ใช่ framework
  • DDD ไม่ใช่ architecture
  • DDD คือ แนวคิดในการออกแบบ Domain

แต่ถ้าไม่มี architecture ที่เหมาะสม:

  • Domain จะโดนเทคโนโลยีรุกล้ำ
  • Business logic จะรั่วออกไปทุก layer
  • DDD จะเหลือแค่ชื่อ

Layered Architecture – จุดเริ่มต้นที่คุ้นเคย

Layered Architecture แบ่งระบบออกเป็นชั้น ๆ เช่น:

Presentation
Application
Domain
Infrastructure

ข้อดี

  • เข้าใจง่าย
  • เหมาะกับทีมที่เริ่มใช้ DDD
  • Mapping กับ DDD ได้ตรงไปตรงมา

ข้อจำกัด

  • Dependency มักไหลผิดทิศ
  • Domain เสี่ยงผูกกับ framework
  • Test Domain แยกยากถ้า discipline ไม่ดี

Layered ใช้ได้ แต่ต้อง “เคร่ง” เรื่อง dependency


Clean Architecture – ปกป้อง Domain เป็นศูนย์กลาง

Clean Architecture วาง Domain และ Use Case ไว้ตรงกลาง

หลักการสำคัญ:

  • Dependency ต้องชี้เข้าใน
  • Domain ไม่รู้จักโลกภายนอก
  • Framework เป็น detail

โครงสร้างเชิงแนวคิด:

Entities
Use Cases
Interface Adapters
Frameworks & Drivers

เหมาะกับ DDD อย่างไร

  • Domain สะอาด
  • Test ง่าย
  • เปลี่ยน UI / DB ได้โดยไม่กระทบ Domain

ข้อแลกเปลี่ยนคือ:

  • โครงสร้างซับซ้อนขึ้น
  • ต้องเข้าใจ abstraction ดี

Hexagonal Architecture – โลกภายนอกเข้ามาทาง Port

Hexagonal Architecture (Ports & Adapters) มองระบบเป็นแกนกลางที่ถูกล้อมด้วย adapter

แนวคิดหลัก:

  • Domain อยู่ตรงกลาง
  • ติดต่อโลกภายนอกผ่าน Port
  • Adapter เปลี่ยนได้โดยไม่กระทบ Domain
UI Adapter → Port → Application / Domain ← Port ← DB Adapter

ข้อดี

  • แยก concern ชัดมาก
  • เหมาะกับระบบที่มี integration เยอะ
  • รองรับ event-driven architecture ได้ดี

ข้อจำกัด

  • Conceptual overhead สูง
  • ไม่เหมาะกับระบบเล็กมาก

แล้วควรเลือก Architecture แบบไหน

คำตอบคือ: ไม่มีแบบไหนดีที่สุดเสมอไป

แนวทางแนะนำ:

  • ระบบเล็ก / ทีมใหม่ → Layered (แต่คุม dependency)
  • ระบบธุรกิจจริง / scale ได้ → Clean หรือ Hexagonal
  • ระบบที่ event-driven / integration หนัก → Hexagonal

สิ่งสำคัญไม่ใช่ชื่อ Architecture แต่คือการปกป้อง Domain


สรุป

  • DDD ต้องการ Architecture ที่ปกป้อง Domain
  • Layered, Clean และ Hexagonal ล้วนใช้กับ DDD ได้
  • เลือกให้เหมาะกับบริบททีมและระบบ
  • ถ้า Domain แข็งแรง Architecture จะเป็นพลัง ไม่ใช่ภาระ

ด้วยตอนที่ 10 นี้ แกนหลักของ DDD series ถือว่าครบถ้วนแล้ว

ถัดจากนี้ คุณสามารถต่อยอดไปสู่ DDD in Practice เช่น:

  • Transaction & Consistency Boundary
  • Eventual Consistency
  • Refactoring Legacy System ด้วย DDD

SEO Meta (สำหรับ Yoast)

Focus Keyphrase: DDD Architecture

Meta Description:

Layered, Clean และ Hexagonal Architecture ต่างกันอย่างไร และแบบไหนเหมาะกับ Domain-Driven Design บทความนี้อธิบายการเลือก architecture เพื่อปกป้อง business logic และทำให้ DDD ใช้งานได้จริงในระบบธุรกิจ