Sao cũng là Java Data Object mà nhiều tên như vậy?
Mỗi dự án lại đặt tên cho lớp dữ liệu khác nhau. Nào là DAO, DTO, POJO, Model, Entity,... mỗi ông một kiểu, lại có những folder giống nhau. Vì lý do đó, hôm nay mình ngồi viết một bài tản mạn về những tên gọi mà một Java Class có thể có trong một dự án Spring Boot.
Cách đây 2 năm, lúc mới bước chân vào con đường học Java, chắc do khả năng tiếp thu của bản thân mà mình rất là trục trặc với Java Spring Boot. Lúc đó chưa có nhiều tutorial dễ hiểu và đi vào trọng tâm như bây giờ, cộng thêm việc skip Java Core vì tưởng nó cũng tương đồng với C++ thôi mà mình đã bị "lú" rất nhiều khi tham khảo các list tutorial trên Facebook cũng như khi đọc các blog nhập môn Spring Boot. Mỗi dự án lại đặt tên cho lớp dữ liệu khác nhau. Nào là DAO, DTO, POJO, Model, Entity,... mỗi ông một kiểu, lại có những folder giống nhau. Vì lý do đó, hôm nay mình ngồi viết một bài tản mạn về những tên gọi mà một Java Class có thể có trong một dự án Spring Boot.
Dưới đây là danh sách một số loại Java Data Object thông dụng
STT | Tên gọi | Mục đích - Vai trò |
---|---|---|
1 | Entity | Class ánh xạ với bảng trong database (dùng JPA/Hibernate). Có annotation như @Entity, @Id. |
2 | Model | Cách gọi chung chung – có thể là Entity, hoặc một object chứa dữ liệu cho View (theo mô hình MVC). |
3 | POJO | Class Java cơ bản, không ràng buộc framework nào. Dùng để chứa dữ liệu đơn giản. |
4 | DTO | Dùng để truyền dữ liệu giữa các tầng (thường là giữa Controller ↔ Service). Không chứa logic nghiệp vụ. |
5 | Request | Dùng để chứa dữ liệu mapping từ request xuống server. |
6 | Response | Lưu dữ liệu tùy biến cho reponse, thường dùng để tùy biến theo Role(quyền) của user |
Có thể thấy, mỗi lại Java Object được dùng để phục vụ cho một mục đích sử dụng riêng cho một ứng dụng backend. Để hiểu được điều này, ta nên có một hình dung trước về luồng dữ liệu và xử lý từ khi người dùng gửi request từ Client đến khi Server xử lý và trả về response. [Mình sẽ bổ sung hình ảnh sau]
Chúng ta hãy xem qua một số ví dụ để biết trong dự án thực tế những loại Java Object kể trên có hình dáng như thế nào.
1. Entity:
Ví dụ về một lớp Entity Sach, dùng để lưu trữ dữ liệu trả về từ table Sach trong Database. Vì dùng annotation @Entity nên đặt cho loại Object này là Entity. Một số dự án dùng tên gọi là Model để khớp với mô hình MVC.
@Entity
public class Sach {
@Id
private Long id;
private String ten;
private String tacGia;
}
2. DTO:
TIếp theo là ví dụ về lớp SachDTO để nhận dữ liệu từ request và chứa dữ liệu response
public class SachDTO {
private String ten;
private String tacGia;
}
Trong thực tế, những dữ liệu trong request và response có thể không giống nhau. Khi đó ta có thể tạo SachRequest và SachResponse.
Đối với POJO, vì mình chưa có cơ hội tiếp cận nên thời gian sau sẽ bổ sung cho bài viết này.
Cảm ơn bạn đã đọc đến hết bài viết này.
Trân trọng, Nhiên.
All rights reserved