Back to notes
mastery-backend-nestjs
Featured

NestJS vs Express: ทำไม Senior ถึงเลือก Architecture ที่เข้มงวดกว่า?

เจาะลึกเหตุผลที่โปรเจกต์ระดับ Enterprise ต้องขยับจาก Express ไปหา NestJS และการออกแบบโครงสร้างแอปให้ขยายตัวได้อย่างไม่มีที่สิ้นสุด

February 5, 20262 min read readNNexis by Seereen

🛑 1. The Chaos Phase: "Express คืออิสระที่อาจนำไปสู่หายนะ"

Express.js เป็น Library ที่ยอดเยี่ยม มันเบาและเร็ว แต่ปัญหาของมันคือ "ความไม่มีระเบียบ (Unopinionated)" ครับ ในทีมขนาดใหญ่ ถ้าไม่มี Senior คอยคุมทิศทาง โครงสร้างไฟล์จะกลายเป็น Spaghetti ได้ง่ายมาก

HLJS JAVASCRIPT
// ❌ Express: วางอะไรไว้ตรงไหนก็ได้
// ทำให้คนใหม่ที่เข้าทีมมาต้องใช้เวลาเป็นสัปดาห์เพื่อหาว่า Logic การจ่ายเงินอยู่ที่ไฟล์ไหน

💡 2. Real-Life Analogy: เลโก้กล่องเปล่า vs ชุดเลโก้ที่มีคู่มือ

  • Express: เหมือน "เลโก้ที่เทรวมกันในกล่องมหาศาล". คุณสร้างอะไรก็ได้ แต่ถ้าจะสร้างยานอวกาศขนาดใหญ่ คุณต้องเก่งและมีระเบียบจัดคนเดียวทุกอย่าง
  • NestJS: เหมือน "ชุดเลโก้ระดับโปร (Technic)" ที่มาพร้อมคู่มือและโครงสร้างที่ชัดเจน มีช่องสำหรับใส่เครื่องยนต์ มีล้อ มีไฟ ทุกคนในทีมจะรู้ทันทีว่า "ไฟล์นี้ต้องวางที่ชั้นนี้"
  • บทสรุป: NestJS บังคับให้คุณเขียนโค้ดที่เป็นระเบียบตั้งแต่บรรทัดแรก เพื่อให้ระบบของคุณ Scalable และ Maintainable ในระยะยาวครับ

🚀 3. Execution Journey: 3 เสาหลักของ NestJS ที่ทำให้ผมมั่นใจ

ในโปรเจกต์อย่าง Aura Tour Booking ผมเลือกใช้ NestJS เพราะเสาหลักเหล่านี้:

🛠 Step-by-step:

  1. Modules: แบ่งหน้าที่ชัดเจน (เช่น AuthModule, TourModule, PaymentModule) ทำให้การจัดการ Dependency เป็นระเบียบและไม่พันกัน
  2. Dependency Injection (DI): ช่วยให้เราทดสอบโค้ด (Unit Testing) ได้ง่ายมาก เพราะเราสามารถฉีด Mock Service เข้าไปตอนไหนก็ได้
  3. Built-in Swagger: แค่ใส่ Decorator ไม่กี่ตัว เราก็จะได้ API Documentation ที่สวยงามและเชื่อมต่อกับ Backend ได้โดยตรงทันที ไม่ต้องมาเขียนไฟล์ JSON แยกให้เหนื่อยครับ
HLJS TYPESCRIPT
// ✅ ตัวอย่างการใช้ NestJS Decorator เพื่อทำ Swagger และ Validation ไปพร้อมกัน
@ApiTags("tours")
@Controller("tours")
export class TourController {
  @Get(":id")
  @ApiOperation({ summary: "Get tour details by ID" })
  findOne(@Param("id") id: string) {
    return this.tourService.findOne(id);
  }
}

🪤 4. The Junior Trap: การใช้ NestJS แต่ยังเขียนแบบ Express

จูเนียร์หลายคนชอบยัด Logic ทุกอย่างไว้ใน Controller (Fat Controller):

  • ปัญหา: Controller ควรมีหน้าที่แค่รับ Input และส่ง Output เท่านั้น
  • ✅ การแก้ไข: แยก Business Logic ไปไว้ใน Service และใช้ Repository Pattern ในการติดต่อฐานข้อมูล จะทำให้โค้ดของคุณทดสอบง่ายและนำกลับมาใช้ซ้ำได้ครับ

⚖️ 5. The Architecture Matrix: เมื่อไหร่ควรใช้ใคร?

หัวข้อExpress.jsNestJS (The Winner for Complex Apps)
ขนาดโปรเจกต์Microservice ขนาดจิ๋ว, MVP เร็วๆEnterprise, Complex Logic, Large Team
การเรียนรู้เร็วมาก (เรียนจบใน 1 วัน)ช้ากว่า (ต้องเข้าใจ OOP, DI, Decorators)
ความเสถียรขึ้นอยู่กับฝีมือคนเขียนสูงมาก เพราะมีโครงสร้างบังคับ (Standardized)
Documentationต้องทำเอง (Manual Postman/Swagger)Auto-generated (ผ่าน Swagger Module)

🎓 6. Senior Mindset Summary

การเลือกเครื่องมือที่ "ยากกว่า" ในตอนแรก แต่ "สบายกว่า" ในตอนหลัง คือสัญญาณของความเป็น Senior ครับ NestJS อาจจะดูซับซ้อนในช่วงแรก แต่ความคุ้มค่าที่คุณจะได้รับเมื่อโปรเจกต์โตขึ้นนั้นมหาศาลมาก สำหรับผม "Consistency is more important than speed" และนั่นคือสิ่งที่ NestJS มอบให้เราครับ!

## References

Share this note

© 2026 My Notes by Seereen