Bỏ qua để đến nội dung

NestJS Foundation

Thời gian: 6 buổi × 90 phút = 9 giờ
Output: API module hoàn chỉnh (Auth + CRUD) + ADR kiến trúc

Backend Node.js thuần dễ thành spaghetti khi scale. Làm sao tổ chức code có cấu trúc, testable, và dễ maintain khi team lớn dần? NestJS mang OOP + DI từ Angular sang Node, nhưng dùng sai dễ thành over-engineering.

Lựa chọn Khi nào dùng Khi nào KHÔNG dùng
NestJS Project lớn, team > 1 dev, cần DI, cần testable API đơn giản 3–5 endpoint (dùng Express/Fastify thuần)
Express thuần Prototype nhanh, API đơn giản, 1 dev Project scale, cần structure rõ ràng
Fastify thuần Performance cực cao, không cần DI Cần ecosystem plugin (NestJS wrap sẵn)
Clean Architecture / DDD Business logic phức tạp, domain rõ ràng CRUD đơn giản, không có business rules phức tạp

NestJS cho mọi project backend mới trong lộ trình này. Express/Fastify thuần chỉ khi prototype < 1 tuần.

  • Tạo module cho mỗi file → over-modularization.
  • Dùng @Injectable() cho mọi class dù không cần inject.
  • Bỏ qua Pipes validation → validate thủ công trong controller.
  • Không viết unit test vì “NestJS phức tạp” — DI sinh ra để dễ test.

Bối cảnh: Dev A viết Guard check @Roles('admin') trên route. Dev B gọi trực tiếp Service method từ một Service khác — bypass Guard hoàn toàn.

Quyết định: Guards chỉ bảo vệ HTTP layer. Business logic phải tự check authorization trong Service/Domain layer. Không tin bất kỳ input nào từ bên ngoài.

Bài học: Authorization phải ở tầng Domain, không chỉ ở tầng HTTP. Guard là lớp phòng thủ thứ nhất, không phải lớp duy nhất.