Valid tại DTO hay nên vaild tại Entity

Như tiêu đề ở trên, mọi người thường vaild ở đâu hơn. Có nên vaild cả 2 không

Những field quan trọng như username, password mình thường validate 3 chỗ: valid bằng js tại ô input frontend, tại controller nhận request submit (DTO) và viết hàm SQL check trong database luôn cho an toàn :joy: (mình không dùng ORM).
Còn thông thường mình chỉ valid tại controller và frontend thôi

2 Likes

Uhm.
Câu hỏi thật ra không nên là “validate cái gì”, mà nên là “validate ở đâu”.

Vì cậu đề cập tới DTO và Entity, tớ assume cậu đang hỏi về validation ở back-end application.
@welogi2437 có đề cập gần đúng ở trên, cậu nên validate ở:

  • Lúc parse dữ liệu sang POJO (hay DTO của cậu).
    Lúc này, cậu thường validate trên từng trường của dữ liệu.
  • Ngay trước khi thực hiện business logic.
    Lúc này, cậu thường kiểm tra ràng buộc dữ liệu giữa các trường, kiểm tra sự nhất quán của dữ liệu mới với dữ liệu đã có, etc.
    Vì controller là nơi điều phối, nên @welogi2437 có đề cập validate ở controller, nhưng thực ra, đó là controller delegate việc validate sang một validation layer thì đúng hơn :smile:

Đó là 2 nơi thường thấy nhất khi validate dữ liệu. Cậu có thể thấy, 2 nơi kể trên đều sử dụng DTO (entity thường dùng ở business logic layer), nên chắc đó là câu trả lời cho câu hỏi gốc của cậu.

Tất nhiên, đôi khi cậu sẽ thấy ai đó validate trước khi insert vào database, cơ mà rule of thumb của việc validate là “thực hiện sớm nhất có thể, trước business logic”. Lý do cũng khá đơn giản, do business logic thường là task tốn kém nhất. Nó thường bao gồm tính toán, kết nối và cập nhật csdl, transactional, etc. => toàn các task nặng nề cả.
Nếu cậu validate sau khi thực hiện logic và trước khi insert vào database, mỗi lần validation fail là cậu đã tốn một mớ thời gian và resource (CPU, thread, connection, etc) của app để thực hiện business logic, nhưng fail ở bước cuối.
Vậy nên, cậu chỉ nên validate sau business logic khi không còn cách nào khác thôi :smile:

Hope it helps!

8 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?