Khó trả lời trừ khi bạn xác định "cách thuần túy" là gì. Chúng ta đang nói về SOA thuần khiết hay WCF thuần khiết?
Proxy WCF đã là DTO theo cách vì chúng không mang theo bất kỳ logic nghiệp vụ nào trong hợp đồng dịch vụ của bạn. Tạo một lớp DTO khác trên lớp proxy được tạo bởi WCF có vẻ dư thừa.
Câu hỏi lớn nhất bạn muốn trả lời là "SOA là giải pháp này như thế nào?". Bạn không thể chia sẻ các thực thể POCO của bạn trên các ranh giới dịch vụ nếu bạn muốn tuân thủ SOA. SOA là tất cả về các hợp đồng khác nhau.
Nếu bạn đi tất cả SOA dựa trên bạn mất rất nhiều chức năng bởi vì các lớp tầng web của bạn sẽ làm việc với hầu hết thời gian sẽ là proxy ngu ngốc. Bạn sẽ phải lặp lại rất nhiều logic và bạn đã mất rất nhiều chức năng "siêu dữ liệu, quy ước trên cấu hình" mà MVC 2 cung cấp.
Nếu bạn ném từ thông báo SOA vào trình hủy tài liệu, bạn nên thực hiện (http://soafacts.com/), sau đó bạn sẽ dễ dàng chia sẻ thông tin dữ liệu meta và dữ liệu meta trên nhiều tầng. Nếu người tiêu dùng duy nhất của dịch vụ web của bạn là chính mình hơn phương pháp này có lẽ là lựa chọn tốt nhất của bạn.
Đây là nơi bạn có thể sử dụng DTO để gửi qua dây thay vì thực thể POCO của bạn. Nhược điểm duy nhất là một lần nữa, lặp lại logic, và rất nhiều mã nghi lễ tấm nồi hơi mà không có gì. Thực sự phụ thuộc vào kích thước của dự án của bạn. Nếu nhỏ của nó, hãy quên đi DTO, nhưng nếu bạn có 20 nhà phát triển làm việc với 200,000 LoC hơn DTO thì có lẽ đáng để tạo ra.
DTO và POCO không giống nhau. Hãy xem [bài viết hay này] (http://rlacovara.blogspot.com/2009/03/what-is-difference-between-dto-and-poco.html?m=1). Nếu bạn sử dụng DTO, hãy cân nhắc việc sử dụng [EntitiesToDTOs] (http://entitiestodtos.codeplex.com) để tự động tạo DTO từ tệp Entity Framework EDMX của bạn. – kzfabi