Chà, bạn có thể thấy một ví dụ hay trong Khung dữ liệu mùa xuân dựa trên khái niệm về kho lưu trữ.
Ở đó bạn sẽ thấy các kho lưu trữ chỉ xử lý kho lưu trữ dữ liệu và hiếm khi chứa bất kỳ logic nghiệp vụ nào (phần này được dành riêng cho lớp dịch vụ). Vì vậy, ví dụ, bạn hãy xem thiết kế của họ, bạn sẽ thấy họ có giao diện CRUDRep repository hiển thị các phương thức để tạo, hủy và khôi phục các thực thể (trong số những thứ khác). Ngoài ra còn có PagingAndSortingRep repository bổ sung thêm chức năng cho chính xác đó, sắp xếp và phân trang kết quả, v.v.
Vì vậy, khung này có lẽ là một nơi tốt để nghiên cứu một thiết kế kho lưu trữ tốt.
Theo như tôi biết, nhiều khái niệm được triển khai bởi Spring Data Framework, đến từ một cuốn sách tuyệt vời có tên là Thiết kế hướng tên miền: Xử lý sự phức tạp trong trái tim của phần mềm , cuốn sách có toàn bộ phần dành riêng cho thiết kế Kho lưu trữ.
Bạn có thể xem xét nhận được một bản sao của nó.
Một đoạn trích nhỏ từ cuốn sách giải thích:
Mẫu REPOSITORY là một khung khái niệm đơn giản để gói gọn các giải pháp đó và mang lại trọng tâm mô hình của chúng tôi.
REPOSITORY đại diện cho tất cả các đối tượng thuộc một loại nhất định dưới dạng một tập hợp khái niệm (thường được mô phỏng). Nó hoạt động như một bộ sưu tập, ngoại trừ với khả năng truy vấn phức tạp hơn. Các đối tượng thuộc loại thích hợp được thêm và xóa, và máy móc đằng sau REPOSITORY chèn chúng hoặc xóa chúng khỏi cơ sở dữ liệu. Định nghĩa này tập hợp một tập hợp trách nhiệm gắn kết để cung cấp quyền truy cập vào gốc rễ của AGGREGATE từ vòng đời đầu đến cuối.
Khách hàng yêu cầu các đối tượng từ REPOSITORY bằng các phương thức truy vấn chọn các đối tượng dựa trên các tiêu chí được chỉ định bởi máy khách, thường là giá trị của các thuộc tính nhất định. REPOSITORY truy xuất đối tượng được yêu cầu, đóng gói bộ máy của các truy vấn cơ sở dữ liệu và ánh xạ siêu dữ liệu. REPOSITORIES có thể thực hiện một loạt các truy vấn chọn đối tượng dựa trên bất kỳ tiêu chí nào khách hàng yêu cầu. Họ cũng có thể trả về thông tin tóm tắt, chẳng hạn như đếm có bao nhiêu trường hợp đáp ứng một số tiêu chí. Họ thậm chí có thể trả về các tính toán tóm tắt, chẳng hạn như tổng trên tất cả các đối tượng phù hợp của một số thuộc tính số.
Một REPOSITORY nâng một gánh nặng lớn từ khách hàng, giờ đây có thể nói chuyện với một giao diện đơn giản, tiết lộ ý định và hỏi xem nó cần gì về mô hình. Để hỗ trợ tất cả điều này đòi hỏi rất nhiều cơ sở hạ tầng kỹ thuật phức tạp, nhưng giao diện đơn giản và được kết nối về mặt khái niệm với mô hình miền.
Vì thế:
Đối với mỗi loại đối tượng cần truy cập toàn cầu, hãy tạo một đối tượng có thể cung cấp ảo ảnh về bộ sưu tập trong bộ nhớ của tất cả các đối tượng thuộc loại đó. Thiết lập quyền truy cập thông qua giao diện toàn cầu nổi tiếng.
Cung cấp các phương thức để thêm và xóa các đối tượng, sẽ đóng gói việc chèn hoặc xóa dữ liệu thực tế trong kho lưu trữ dữ liệu. Cung cấp các phương thức chọn đối tượng dựa trên một số tiêu chí và trả về các đối tượng hoặc bộ sưu tập đối tượng được khởi tạo hoàn toàn có giá trị thuộc tính đáp ứng tiêu chí, từ đó gói gọn công nghệ lưu trữ và truy vấn thực tế. Chỉ cung cấp REPOSITORIES cho các gốc AGGREGATE thực sự cần truy cập trực tiếp. Giữ khách hàng tập trung vào mô hình, ủy thác tất cả lưu trữ đối tượng và truy cập vào REPOSITORIES.