รู้จัก Ports and Adapters Pattern
ให้ Business Logic พึ่งพา Interface แทนการพึ่งพา Database หรือ Framework
Concept
Ports and Adapters หรือ Hexagonal Architecture เป็นแนวคิดที่ช่วยแยก Business Logic ออกจากรายละเอียดภายนอก เช่น Database, API หรือ Framework
Business Layer รู้จักเพียง Interface (Port) ส่วนการเชื่อมต่อกับระบบจริงจะถูกจัดการโดย Adapter
Entity
Business Model ที่ไม่รู้จัก Database
- เป็น Model ของ Domain
- ไม่รู้จัก Prisma
- ไม่รู้จัก SQL
- ไม่รู้จัก MongoDB
Port
Business บอกว่า "ฉันต้องการอะไร" Port คือสัญญา (Contract) Business ไม่สนใจว่าข้อมูลมาจากไหน
Business Logic
Business Logic รู้แค่ repository.findById(...) แต่ไม่รู้ว่า findById(id) ทำอะไรบ้าง
Adapter
ยกตัวอย่างเป็น Prisma Adapter คือคนทำงานจริง Business แค่บอกว่า
ขอ User หน่อย
Adapter จะเป็นคนไปถาม Database มาให้
Adapter (Mock)
ถ้าต้องการ Test สามารถทำได้ง่ายๆ เพียงแค่ Mock Adapter
Composition Root
จุดที่เราจะประกอบทุกอย่างเข้าด้วยกัน
Controller
Flow ที่ได้ก็จะหน้าตาแบบนี้
ดังนั้นถ้าจะเปลี่ยน Database ก็แค่เปลี่ยน PrismaUserRepository (Adapter) เป็น Adapter ของ Database ตัวอื่นได้เลยโดยไม่ต้องเปลี่ยน Business Logics
สรุป
แนวคิดสำคัญของ Ports and Adapters คือ Business Logic ไม่ควรขึ้นกับรายละเอียดของ Infrastructure แต่ควรสื่อสารผ่าน Interface เพื่อให้ระบบยืดหยุ่น ทดสอบง่าย และเปลี่ยนเทคโนโลยีได้โดยกระทบกับโค้ดน้อยที่สุด