Tôi đã đọc một cuốn sách về thiết kế điều khiển tên miền, nó có tiêu đề Mẫu, Nguyên tắc và Thực tiễn về Thiết kế Điều khiển Miền (PPPDDD). Tôi đã rất thích đọc nó cho đến nay, và nó mang lại rất nhiều hiểu biết về DDD trong thế giới .NET. Tuy nhiên, có một điều làm phiền tôi rất nhiều. Trong chương 21 (mẫu Repository), tác giả thực hiện hai yêu cầu sau đây:Mẫu kho lưu trữ là thủ tục, không phải là OOP?
yêu cầu bồi thường 1:
Các kho không phải là một đối tượng. Nó là một ranh giới thủ tục và một hợp đồng rõ ràng đòi hỏi nhiều nỗ lực khi đặt tên các phương thức trên nó như là các đối tượng trong mô hình miền của bạn.
yêu cầu bồi thường 2:
Các kho là hợp đồng giữa mô hình miền và các cửa hàng kiên trì. Nó chỉ nên được viết dưới dạng miền và không có ý nghĩ về khung kiên trì cơ bản. Xác định ý định và làm cho nó rõ ràng; không xử lý hợp đồng kho lưu trữ như mã hướng đối tượng.
Vì vậy, mẫu lưu trữ không phải là OOP, mà là thủ tục? Bạn có đồng ý với những tuyên bố của tác giả cuốn sách này không? Tại sao phải rõ ràng về các phương thức lưu trữ, chẳng hạn như findByUsername (string Username) làm cho thủ tục lưu trữ trong tự nhiên?
Tôi muốn viết mã OO, không phải mã thủ tục. Nếu kho chứa là thủ tục, nó sẽ giết chết mục đích của tôi bằng cách sử dụng mẫu này. Tôi thực sự hy vọng những gì tác giả nói là không đúng sự thật, bạn nghĩ sao?
btw, tôi đã cung cấp ảnh chụp nhanh của bộ phận, trong đó tác giả cuốn sách khẳng định kho được thủ tục dưới đây, hãy nhìn vào họ nếu nó giúp:
Tác giả ngụ ý đơn giản là bạn không nên thiết kế hợp đồng kho lưu trữ với OCP trong đầu, cho phép truyền các đối tượng truy vấn tùy ý. – plalx
Đúng, mặc dù tác giả đưa ra một số tuyên bố kỳ lạ, điểm chính của họ có vẻ là "khi thực hành DDD không triển khai mẫu IRepository không linh hoạt, thay vào đó sử dụng các phương thức truy vấn rõ ràng mô hình các yêu cầu dữ liệu của miền". –