Vì sao tôi bỏ ORM cho dự án nhỏ
Khi truy vấn còn ít và rõ ràng, SQL viết trực tiếp giúp tôi nhìn thấy chi phí và giữ lớp dữ liệu dễ kiểm tra.
Bắt đầu từ truy vấn thực tế
Trong một ứng dụng nhỏ, lớp dữ liệu có thể chỉ gồm vài truy vấn phục vụ những màn hình đã biết trước. Tôi muốn nhìn rõ dữ liệu nào được đọc, điều kiện lọc nằm ở đâu và mỗi yêu cầu gửi bao nhiêu câu lệnh đến cơ sở dữ liệu.
Viết SQL trực tiếp là một lựa chọn cho phạm vi đó. Nó không xoá đi công việc quản lý schema, migration hay kiểm tra kiểu dữ liệu; những phần này vẫn cần được thiết kế rõ ràng.
Giữ ranh giới nhỏ
Tôi đặt truy vấn trong một lớp truy cập dữ liệu, thay vì rải SQL vào từng component. Hàm gọi chỉ nhận tham số nghiệp vụ và trả về dữ liệu cần thiết cho giao diện.
const result = await db.query('SELECT id, title FROM posts WHERE author_id = $1 LIMIT $2', [
authorId,
20,
]);
Ví dụ trên minh hoạ cách truyền tham số riêng với câu lệnh. API cụ thể phụ thuộc driver đang dùng. Tránh ghép trực tiếp dữ liệu người dùng vào chuỗi SQL.
Lớp dữ liệu tốt là lớp mà người tiếp theo có thể đọc, kiểm tra và sửa một cách tự tin.
Những thứ vẫn phải làm
- Quản lý thay đổi schema bằng migration có lịch sử.
- Kiểm thử truy vấn với cơ sở dữ liệu thử nghiệm.
- Giới hạn số bản ghi và theo dõi thời gian phản hồi.
- Dùng transaction khi nhiều thao tác phải thành công cùng nhau.
Khi mô hình dữ liệu và quan hệ trở nên phức tạp, tôi sẽ đánh giá lại lựa chọn này. ORM vẫn có thể giúp nhóm giảm công việc lặp lại; quyết định nên đi theo nhu cầu của sản phẩm và khả năng bảo trì của đội.