Tôi (đang) thiết kế ứng dụng quy mô lớn, chúng tôi sử dụng kiến trúc nhiều lớp dựa trên DDD.
Chúng tôi có MVC với lớp dữ liệu (triển khai kho lưu trữ), lớp miền (định nghĩa mô hình và giao diện miền - kho lưu trữ, dịch vụ, đơn vị công việc), lớp dịch vụ (triển khai dịch vụ). Cho đến nay, chúng tôi sử dụng các mô hình miền (chủ yếu là các thực thể) trên tất cả các lớp và chúng tôi chỉ sử dụng các DTO làm mô hình khung nhìn (trong bộ điều khiển, dịch vụ trả về (các) mô hình miền và bộ điều khiển tạo mô hình khung nhìn, được chuyển đến dạng xem).
Tôi đã đọc vô số bài viết về việc sử dụng, không sử dụng, lập bản đồ và chuyển DTO. Tôi hiểu rằng không có bất kỳ câu trả lời dứt khoát nào, nhưng tôi không chắc liệu nó có ổn hay không trả lại các mô hình miền từ các dịch vụ cho bộ điều khiển. Nếu tôi trả về mô hình miền, nó vẫn không bao giờ được chuyển đến dạng xem, vì bộ điều khiển luôn tạo mô hình khung nhìn cụ thể cho chế độ xem - trong trường hợp này, nó có vẻ hợp pháp. Mặt khác, nó không cảm thấy đúng khi mô hình miền rời khỏi lớp nghiệp vụ (lớp dịch vụ). Đôi khi dịch vụ cần trả về đối tượng dữ liệu không được xác định trong miền và sau đó chúng tôi phải thêm đối tượng mới vào miền không được ánh xạ hoặc tạo đối tượng POCO (điều này thật xấu, vì một số dịch vụ trả về mô hình miền, một số dịch vụ trả lại hiệu quả DTOs).
Câu hỏi đặt ra là - nếu chúng ta sử dụng nghiêm ngặt các mô hình xem, liệu có thể trả lại các mô hình miền hoàn toàn cho bộ điều khiển hay chúng ta nên luôn sử dụng DTO để liên lạc với lớp dịch vụ? Nếu vậy, điều chỉnh các mô hình miền dựa trên những dịch vụ nào cần? (Thành thật mà nói tôi không nghĩ vậy, vì các dịch vụ nên tiêu thụ tên miền nào.) Nếu chúng ta nên tuân thủ nghiêm ngặt các DTO, chúng có nên được định nghĩa trong lớp dịch vụ không? (Tôi cũng nghĩ vậy) s) - có vẻ như sẽ không có ý nghĩa gì khi tạo DTO giống như mô hình miền) - nhưng tôi thích sự nhất quán và thực hành tốt.
Bài viết Miền vs DTO vs ViewModel - Cách sử dụng và khi nào? (và một số bài viết khác) rất giống với vấn đề của tôi, nhưng nó không trả lời (các) câu hỏi này. Bài viết Tôi có nên triển khai DTO trong mẫu kho lưu trữ với EF không? cũng tương tự, nhưng nó không đối phó với DDD.
Tuyên bố miễn trừ trách nhiệm: Tôi không có ý định sử dụng bất kỳ mẫu thiết kế nào chỉ vì nó tồn tại và lạ mắt, mặt khác, tôi cũng muốn sử dụng các mẫu và thực tiễn thiết kế tốt vì nó giúp thiết kế toàn bộ ứng dụng, giúp phân tách mối quan tâm, thậm chí tohugh sử dụng mẫu cụ thể không phải là "cần thiết", ít nhất là tại thời điểm này.
Như mọi khi, cảm ơn bạn.