Lý do lớn nhất mà tôi có xu hướng hướng tới việc có một lớp dịch vụ là vì hai lý do sau ...
-
Đánh dấu phương thức là @Transactional để tất cả các yêu cầu DAO bên trong phương thức này diễn ra trong một giao dịch duy nhất.
-
Tôi có thể tăng mức độ tách biệt mối quan tâm khỏi DAO và các vai trò của người dùng. Tôi có thể đánh dấu các phương thức là yêu cầu một số vai trò người dùng nhất định và như vậy, nó thực sự phù hợp với Spring Security.
Bạn chỉ có thể gọi một DAO từ bộ điều khiển, nhưng nó khiến bạn bị mắc kẹt nếu bạn muốn mở rộng sau này. Để có được kết nối, bạn có thể sử dụng đánh dấu dịch vụ là @Transactional và DAO làm @Repository và Spring sẽ xử lý toàn bộ việc lấy đối tượng phiên cho bạn và tiêm, v.v.
Tôi có xu hướng nghĩ (có thể không chính xác) về lớp dịch vụ như một mặt tiền được truy cập, có thể là từ dịch vụ web hoặc bộ điều khiển hoặc bất cứ điều gì, nó luôn tách biệt.