Tôi đã đấu tranh với điều này bản thân mình. Có những trường hợp DTO có ý nghĩa khi sử dụng trong trình chiếu. Giả sử tôi muốn hiển thị danh sách các Công ty trong hệ thống của mình và tôi cần id của họ để ràng buộc giá trị.
Thay vì tải một CompanyObject có thể có tham chiếu đến đăng ký hoặc ai biết gì khác, tôi có thể gửi lại DTO với tên và id. Đây là một IMHO sử dụng tốt.
Bây giờ hãy lấy một ví dụ khác. Tôi có một đối tượng đại diện cho một Ước tính, ước tính này có thể được tạo thành lao động, thiết bị, v.v., nó có thể có rất nhiều phép tính được xác định bởi người dùng lấy tất cả các mục này và tổng hợp chúng (Mỗi ước tính có thể khác nhau với các loại khác nhau tính toán). Tại sao tôi phải mô hình đối tượng này hai lần? Tại sao tôi không thể liệt kê giao diện người dùng của mình qua các phép tính và hiển thị chúng?
Tôi thường không sử dụng DTO để tách lớp miền của mình khỏi giao diện người dùng. Tôi sử dụng chúng để cô lập lớp miền của mình khỏi ranh giới nằm ngoài tầm kiểm soát của tôi. Ý tưởng rằng ai đó sẽ đưa thông tin điều hướng vào đối tượng kinh doanh của họ là vô lý, đừng làm ô nhiễm đối tượng kinh doanh của bạn.
Ý tưởng rằng ai đó sẽ đặt xác nhận vào đối tượng kinh doanh của họ? Tôi nói rằng đây là một điều tốt. Giao diện người dùng của bạn không nên có trách nhiệm duy nhất để xác thực các đối tượng kinh doanh của bạn. Lớp kinh doanh của bạn PHẢI thực hiện xác nhận của riêng nó.
Tại sao bạn lại đặt mã tạo giao diện người dùng trong một đối tượng busienss? Trong trường hợp của tôi, tôi có các đối tượng riêng biệt tạo ra mã giao diện người dùng riêng biệt từ giao diện người dùng. Tôi đã nói các đối tượng hiển thị các đối tượng kinh doanh của tôi thành Xml, ý tưởng rằng bạn phải tách các lớp của mình để ngăn chặn loại ô nhiễm này rất xa lạ với tôi vì tại sao bạn lại đặt mã tạo HTML vào một đối tượng kinh doanh ...
Chỉnh sửa
Theo tôi nghĩ thêm một chút, có những trường hợp thông tin giao diện người dùng có thể thuộc về lớp miền. Và điều này có thể làm đám mây cái mà bạn gọi là lớp miền nhưng tôi đã làm việc trên một ứng dụng nhiều người thuê, ứng dụng này có hành vi rất khác nhau cả về giao diện người dùng và quy trình làm việc chức năng. Tùy thuộc vào các yếu tố khác nhau. Trong trường hợp này, chúng tôi có một mô hình miền đại diện cho người thuê và cấu hình của họ. Cấu hình của chúng tình cờ bao gồm thông tin giao diện người dùng (Ví dụ: nhãn cho các trường chung).
Nếu tôi phải thiết kế các đối tượng của mình để làm cho chúng có thể tồn tại được, thì tôi có nên nhân bản các đối tượng không? Hãy nhớ rằng nếu bạn muốn thêm một trường mới, bây giờ bạn có hai nơi để thêm nó. Có lẽ điều này đặt ra một câu hỏi khác nếu bạn đang sử dụng DDD, có phải tất cả các đối tượng miền của thực thể lâu dài không? Tôi biết trong ví dụ của tôi là họ.