Vấn đề tôi liên tục gặp phải là làm thế nào để xử lý các giá trị được tính toán theo logic miền trong khi vẫn hoạt động hiệu quả đối với việc lưu trữ dữ liệu.
Thí dụ:
Tôi đang trả lại danh sách Sản phẩm từ kho lưu trữ của mình thông qua dịch vụ. Danh sách này được giới hạn bởi thông tin phân trang từ yêu cầu DTO được gửi bởi khách hàng. Ngoài ra, DTO chỉ định một tham số sắp xếp (enum thân thiện với khách hàng).
Trong một kịch bản đơn giản, mọi thứ đều hoạt động tốt: dịch vụ gửi các biểu thức phân trang và sắp xếp tới repo và repo đưa ra một truy vấn hiệu quả cho DB.
Tuy nhiên, tất cả đã bị hỏng khi tôi cần sắp xếp các giá trị được tạo trong bộ nhớ từ mô hình miền của mình. Ví dụ, lớp Product có phương thức IsExpired () trả về một bool dựa trên logic nghiệp vụ. Bây giờ tôi không thể sắp xếp và trang ở cấp repo - tất cả sẽ được thực hiện trong bộ nhớ (không hiệu quả) và dịch vụ của tôi sẽ phải biết những điều phức tạp khi nào nên đưa các thông số này cho repo và khi nào thực hiện phân loại / phân trang chinh no.
Mẫu duy nhất có vẻ hợp lý với tôi là lưu trữ trạng thái của thực thể trong db (biến IsExpired () thành trường chỉ đọc và cập nhật thông qua logic miền trước khi lưu). Nếu tôi tách logic này thành một kho lưu trữ "mô hình đọc / dto" và "báo cáo" riêng biệt, thì tôi đang làm cho mô hình của mình bị thiếu máu nhiều hơn tôi muốn.
BTW, mọi ví dụ tôi đã thấy ngoài kia cho các tính toán như thế này dường như thực sự dựa vào xử lý trong bộ nhớ và che đậy thực tế rằng nó kém hiệu quả hơn về lâu dài. Có lẽ tôi đang tối ưu hóa sớm, nhưng điều đó không phù hợp với tôi.
Tôi rất muốn nghe cách người khác giải quyết vấn đề này vì tôi chắc chắn rằng nó phổ biến trong gần như dự án liên quan đến DDD.