Các thành phần của app
Định nghĩa
the requests received by the server, the routes that handle the requests and trigger the execution of their controller handlers, the middlewares that can control the request flow and the request before moving forward, the controllers that execute code once a route has been reached, the services that are used to build custom logic reusable by controllers, the models that are a representation of the content data structure, the responses sent to the application that sent the request, and the webhooks that are used to notify other applications of events that occured. Routes
Controller
Thin, ít logic:
Services
Fat, nhiều logic:
Model
Helper
Định nghĩa và Nguyên tắc
Pure function: no side effects Reusability: Dùng lại cho nhiều Models, Controller Testability: Test riêng từng helper Maintainability: Dễ tìm và sửa Single Responsibility / No dependencies: Helpers không phụ thuộc Model/Database Cấu trúc file Helper trong App
Ví dụ
Ví dụ, một ứng dụng tải lên và chia sẻ ảnh miễn phí như Bonus: Validation Modules
Q: Validation nên ở đâu? Model, Middleware hay Service?
A: Câu hỏi rất hay! Đây là điểm nhiều người nhầm lẫn. Câu trả lời là CẢ 3 ĐỀU CÓ, nhưng mỗi nơi validate MỤC ĐÍCH KHÁC NHAU!
So sánh 3 tầng Validation ở từng modules
Middleware: Route → Controller
Request format, required fields, basic types req.file có tồn tại? req.body.title có phải string? File size < 10MB? FAIL FAST (trả lỗi ngay, không chạy tiếp) Service: Controller → Model
Business rules validation User permissions, business rules, context User tier có được upload video? Title có trùng không? Content có an toàn? Có thể gọi database để check Throw error với statusCode Model: Trước INSERT/UPDATE
Data integrity validation Schema validation, data types, constraints width phải > 0? license phải thuộc enum? user_id đúng type? Luồng dữ liệu
USE CASE 1: Hiển thị trang Upload
USE CASE 2: User Submit Form Upload
USE CASE 3: Xem chi tiết ảnh
Chi tiết:
Tóm tắt
Cấu trúc thư mục của App
Luồng dữ liệu chính:
Nguyên tắc vàng:
View: Chỉ hiển thị, không logic Client JS: UX logic, không tin cậy về security Route: Chỉ routing, không business logic Middleware: Pre-processing, có thể reject request Controller: Thin - chỉ điều phối Service: Fat - chứa business logic Helper: Pure functions, stateless Model: Data + CRUD, không biết business context Những quy tắc để quản lý app development
Twitter Tech Tree
Security Tips
Expose API data at client-side