2010-01-05 27 views
8

Như đã mô tả ở trên, tôi đang triển khai kiến ​​trúc nhiều tầng để làm việc với WCF và Entity Framework 4 (với poco). Vì tôi đã có sự thiếu hiểu biết liên tục với POCO, tôi cần thực hiện DTO hay tôi có thể sử dụng WCF theo cách thuần túy?Sử dụng Dịch vụ WCF với Entity Framework 4 và ... DTO?

Trích dẫn chính là - Tôi cần DTO truyền một đối tượng nhẹ trên mạng hoặc tôi có thể sử dụng các thực thể POCO của mình.

Những gì các bạn đề xuất?

+1

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

Trả lời

3

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.

1

Như jfar đã nói nó phụ thuộc vào việc bạn sẽ chỉ là một người tiêu thụ dịch vụ hay liệu cấp trình bày sẽ là bạn.

Nếu bạn đang thực hiện sau này và nó sẽ chỉ là bạn sử dụng dịch vụ của bạn thì bạn có thể nối tiếp bạn POCO trên các ranh giới dịch vụ wcf. Đây là một cái gì đó tôi đã làm gần đây và đã viết này blog post về việc làm cho nó hoạt động. Điều này sẽ cho phép bạn sử dụng cùng các thực thể trong tầng ứng dụng cũng như cấp bản trình bày.

Hy vọng điều đó sẽ hữu ích.

1

Lý do mạnh nhất để đề xuất DTO khi sử dụng WCF với EF là các lớp đầu tiên của cơ sở dữ liệu EF kéo các phụ thuộc triển khai vào các lớp proxy của bạn. Nếu bạn đang sử dụng mã đầu tiên với các lớp POCO, thì sẽ không có các phụ thuộc triển khai thực hiện.

Thử chỉ trả lại các lớp POCO của bạn, nhưng sau đó hãy xem xét kỹ các lớp proxy đã tạo. Hãy chắc chắn rằng không có gì trong những lớp học đó là một phần của cơ sở hạ tầng EF. Nếu các lớp proxy được sạch sẽ, thì bạn sẽ được thiết lập tất cả.

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