Tôi đang tự hỏi như sau: giả sử chúng ta đang xây dựng một hệ thống cần có một số chức năng lọc để tìm kiếm một thực thể nào đó. Ví dụ, người ta có thể muốn áp dụng bộ lọc cho bảng liệt kê các thực thể để tìm thứ gì đó hoặc sử dụng nó để tạo báo cáo trên bộ được lọc, bất cứ điều gì.
Vấn đề là: chúng ta cần phải có logic lọc ở đâu đó. Một cách tồi để làm điều này sẽ là sao chép logic lọc khi cần thiết. Tôi đã làm điều đó một lần và đó là một ý tưởng tồi tệ.
Mặt khác, tôi tin rằng nên có một phương thức như Filter(FilteringOptions filteringOptions)
được thiết kế để thực hiện thao tác lọc và trả về danh sách các thực thể được lọc.
Bây giờ, IMHO, logic lọc là một logic kinh doanh loại. Các chuyên gia kinh doanh là những người biết cách lọc diễn ra, những gì được lọc và làm thế nào. Do đó, tôi tin rằng logic lọc nên được đặt trong lớp miền.
Tôi đã tìm thấy hai tùy chọn để thực hiện việc này: nhúng phương thức lọc vào kho lưu trữ tương ứng cho thực thể cụ thể đó, hoặc nếu không, tạo một dịch vụ miền giống như EntityNameSearchService
sẽ tiêu thụ kho lưu trữ để thực hiện lọc.
Tôi vẫn còn bối rối không biết cái nào sẽ là cách tốt hơn. Vậy, nếu tôi đang cố gắng sử dụng DDD đúng cách, thì logic lọc này sẽ ở đâu? Trên kho lưu trữ hoặc trong một dịch vụ riêng biệt?
Get*
phương thức chung và giới thiệu các bộ lọc khác nhau hoặc do người dùng xác định trong lớp dịch vụ. Quyết định chủ yếu là tùy thuộc vào bạn.