2015-07-15 16 views
6

Tôi nghiêng về DDD để xin lỗi nếu câu hỏi của tôi là ngây thơ. Tôi nghĩ rằng tôi cần phải sử dụng Local Data Transfer Object để hiển thị dữ liệu cho người dùng vì rất nhiều thuộc tính không phải là một phần của bất kỳ đối tượng Entity/Value nào.DDD - lớp DTO nào nên được triển khai

Tuy nhiên, tôi không chắc chắn nơi triển khai DTO này - trong Lớp miền hoặc trong Lớp dịch vụ ứng dụng. Việc triển khai DTO có vẻ như là một phần của miền, nhưng điều đó có nghĩa là khi tôi tạo một bộ sưu tập các DTO trong Lớp dịch vụ và chuyển nó tới một Lớp trình bày, tôi phải tham chiếu Lớp miền trong Lớp trình bày, điều này có vẻ sai.

Cách chính xác để triển khai DTO bằng nguyên tắc DDD là gì?

+0

Tại sao các bạn ấn tượng rằng một DTO là một phần của tên miền? Một DTO là một đại diện kỹ thuật được nối tiếp thân thiện. – plalx

+0

Cảm ơn tất cả các câu trả lời của bạn. Nó làm mọi thứ rõ ràng hơn trong đầu tôi. – user2105030

+0

Đây là trang web QA. Vui lòng đánh dấu một aswer như được chấp nhận (nếu có) để giúp người khác tìm câu trả lời đúng nhanh hơn. – jlvaquero

Trả lời

3

Đặt nó trong Lớp dịch vụ. DTO là một đầu ra của Lớp dịch vụ, nó có ý nghĩa nếu bạn định nghĩa nó ở đó.

Không đặt DTO của bạn trong Lớp tên miền. DTO là đầu vào/đầu ra của Lớp dịch vụ, Lớp Miền không quan tâm đến những thứ bên ngoài lớp của nó.

2

Yorro đúng về vị trí đặt DTO nhưng tôi khuyến khích bạn tránh "suy nghĩ của DTO". Cách suy nghĩ này va chạm với cách suy nghĩ của DDD.

Suy nghĩ về "Tôi cần một DTO ở đây" là suy nghĩ về đại diện kỹ thuật (như plalx nói); nó là mức trừu tượng quá thấp. Hãy thử một mức độ abt của abtraction và suy nghĩ về tên miền của bạn, nhiệm vụ của người dùng và giao diện người dùng của bạn.

Bạn có cần xem dữ liệu cho người dùng không? Mang nó đến giao diện người dùng thông qua một dịch vụ xem mà trả về một lớp học cụ thể của bạn.

Bạn có cần gửi dữ liệu đến một số Dịch vụ để thực hiện tác vụ không? Gửi cho nó một lớp TaskMessageInfo cụ thể hoặc một lớp Command cụ thể.

Khi bạn bắt đầu lập mô hình nội bộ của các lớp này là khi bạn nên bắt đầu suy nghĩ về biểu diễn kỹ thuật của nó; sau đó bạn có thể đạt đến kết luận có thể, tức là các lớp DTO để thuận tiện.

Suy nghĩ theo cách này giúp bạn mô hình hóa hệ thống và không kích hoạt những câu hỏi như

Nơi để đặt hoặc thuộc điều này?

+0

Điểm của bạn có đơn giản là sử dụng tên khác không? YourViewInfo thay vì YourViewDTO? –

+1

@MarkusPscheidt No.Quan điểm của tôi là trong một miền được cấu trúc theo ngữ cảnh (DDD) DTO không có nghĩa là không có gì để bạn không thể hỏi về nơi chúng được đặt. Bạn có thể nói về DTO nếu bạn đang khái quát hóa các khái niệm để giải thích điều gì đó nhưng, trong kiến ​​trúc của bạn, bạn không nên mô hình hóa các DTO; bạn mô hình bối cảnh và bối cảnh là xác định nơi được đặt mô hình. Quan điểm của tôi là câu hỏi không có ý nghĩa trong thế giới DDD. – jlvaquero

Các vấn đề liên quan