Mẫu DAO và Kho lưu trữ là cách triển khai Lớp truy cập dữ liệu (DAL). Vì vậy, trước tiên hãy bắt đầu với DAL.
Các ứng dụng hướng đối tượng truy cập cơ sở dữ liệu, phải có một số logic để xử lý truy cập cơ sở dữ liệu. Để giữ cho mã sạch và mô-đun, nên tách biệt logic truy cập cơ sở dữ liệu vào một mô-đun riêng biệt. Trong kiến trúc lớp, mô-đun này là DAL.
Cho đến nay, chúng ta chưa nói về bất kỳ triển khai cụ thể nào: chỉ có một nguyên tắc chung là đưa logic truy cập cơ sở dữ liệu vào một mô-đun riêng biệt.
Bây giờ, làm thế nào chúng ta có thể thực hiện nguyên tắc này? Chà, một cách biết để thực hiện điều này, đặc biệt với các khung như Hibernate, là mẫu DAO.
Mẫu DAO là một cách tạo DAL, thông thường, mỗi thực thể miền có DAO riêng. Ví dụ, User
và UserDao
, Appointment
và AppointmentDao
vv Một ví dụ về DAO với Hibernate: http://gochev.blogspot.ca/2009/08/hibernate-generic-dao.html .
Vậy thì mô hình Kho lưu trữ là gì? Giống như DAO, mẫu Kho lưu trữ cũng là một cách để đạt được DAL. Điểm chính trong mẫu Kho lưu trữ là, từ góc độ máy khách / người dùng, nó sẽ trông hoặc hoạt động như một bộ sưu tập. Điều gì có nghĩa là bằng cách cư xử như một bộ sưu tập không phải là nó phải được khởi tạo như thế nào Collection collection = new SomeCollection()
. Thay vào đó, nó có nghĩa là nó nên hỗ trợ các hoạt động như thêm, xóa, chứa, v.v ... Đây là bản chất của mẫu Kho lưu trữ.
Trong thực tế, ví dụ trong trường hợp sử dụng Hibernate, mẫu Kho lưu trữ được hiện thực hóa bằng DAO. Đó là một thể hiện của DAL có thể là cùng một thể hiện của mẫu DAO và mẫu Kho lưu trữ.
Mẫu lưu trữ không nhất thiết phải là thứ mà người ta xây dựng trên DAO (như một số có thể đề xuất). Nếu các DAO được thiết kế với giao diện hỗ trợ các hoạt động được đề cập ở trên, thì đó là một thể hiện của mẫu Kho lưu trữ. Hãy suy nghĩ về điều này, nếu các DAO đã cung cấp một tập hợp các thao tác giống như bộ sưu tập, vậy thì cần thêm một lớp bổ sung nào ở trên nó?
IRepository
giao diện của bạn theo nghĩa đen . Bạn sẽ muốn kho lưu trữ của bạn sử dụng DAO trong triển khai. Hãy nhớ rằng, một DAO sẽ là một đối tượng trên mỗi bảng, trong khi Kho lưu trữ hầu như sẽ luôn phải sử dụng nhiều DAO để xây dựng một Thực thể duy nhất. Nếu bạn thấy đó không phải là trường hợp, thì Kho lưu trữ và Thực thể của bạn chỉ cần truy cập vào một bảng duy nhất, thì rất có thể bạn đang xây dựng một miền thiếu máu.