2010-09-28 31 views
31

Chúng tôi đang bắt đầu một sản phẩm dựa trên web mới, trong đó chúng tôi đang có kế hoạch để lộ logic kinh doanh của chúng tôi thông qua các dịch vụ WCF. Chúng tôi sẽ sử dụng ASP.NET 4.0, C#, EF 4.0. Trong tương lai, chúng tôi muốn xây dựng các ứng dụng iPhone và các ứng dụng WPF dựa trên các dịch vụ. Tôi đã đọc rất nhiều về việc sử dụng POCO vs Self Tracking Entities (STE) và từ hiểu của tôi, các STE không hoạt động tốt với kịch bản web. Có ai có thể làm sáng tỏ thêm về vấn đề này không?Thực thể theo dõi tự so với thực thể POCO

+0

Tôi đánh giá cao câu hỏi này được hỏi một lúc trước, nhưng tôi tò mò về những gì bạn quyết định cuối cùng tình hình POCO vs STE? –

Trả lời

36

Đối với tôi STE là khái niệm hoàn toàn sai. Nó chỉ là một thực hiện khác của DataSet.

  • Trong ứng dụng ASP.NET, bạn sẽ phải lưu trữ STE ở đâu đó trong số các yêu cầu. Trong yêu cầu đầu tiên, bạn sẽ truy vấn nguồn dữ liệu của mình để lấy STE và cung cấp dữ liệu trong trang. Trong yêu cầu tiếp theo (postback), bạn sẽ muốn sửa đổi STE với dữ liệu trả về từ trình duyệt. Để hỗ trợ theo dõi, bạn sẽ phải sử dụng cùng STE như trong yêu cầu đầu tiên = > bạn sẽ phải lưu trữ STE trong viewstate (nếu bạn muốn sử dụng ASP.NET WebForms) hoặc phiên.
  • STE vô dụng đối với SOA hoặc khả năng tương tác. Theo dõi logic là một phần của STE = nó đang chạy trên máy khách. Nếu bạn vạch trần STE trong dịch vụ, bạn sẽ thấy ngay rằng phía máy khách sẽ sử dụng các tính năng theo dõi giống như trong logic STE. Nhưng những tính năng này không được cung cấp cho phía bên kia một cách tự động. Trong .NET bạn có chúng bởi vì bạn chia sẻ assembly với STEs. Nhưng trên nền tảng khác, bạn phải giải thích các nhà phát triển cách thực hiện logic STE để làm cho nó hoạt động trên mặt của bạn. Đây có lẽ là trường hợp hạn chế nhất đối với bạn vì ứng dụng iPhone.
+0

Trong ASP.NET, tại sao không chỉ hiển thị STE theo yêu cầu đầu tiên và lúc postback lấy STE từ cơ sở dữ liệu, cập nhật các trường và lưu? –

+2

Nếu bạn hài lòng với truy vấn cơ sở dữ liệu bổ sung, bạn không cần STE chút nào - ngoại trừ việc sửa đổi đồ thị đối tượng phức tạp. Bạn có thể cho ObjectContext (với các proxy POCO) theo dõi các thay đổi cho bạn. –

+0

"STE là vô dụng đối với SOA hoặc khả năng tương tác." Tôi hoàn toàn đồng ý. Thật không may mọi người dường như nhấn mạnh vào xem SOA và WCF như remoting. Chắc chắn, nó có thể được thực hiện, nhưng sau đó bạn đang đặt rất nhiều niềm tin vào khách hàng. –

7

Thực thể theo dõi tự hoạt động hoàn hảo trong một MVC Web với kịch bản WCF. Tôi đã tham gia vào 2 dự án sử dụng chúng (một trong những sản phẩm, một phần lớn).

Với POCO, bạn sẽ mất bất kỳ thay đổi nào theo dõi dây dẫn gây ra nhiều đau đớn hơn vì EF hiện phải truy vấn lại thông tin tiểu bang. Nếu bạn sử dụng EF và WCF STE, hãy giải quyết rất nhiều vấn đề và làm cho toàn bộ đường dẫn bền vững của bạn trở nên thực sự suôn sẻ.


Bạn có thể cung cấp trích dẫn cho khiếu nại này không? "STE không hoạt động tốt với kịch bản web"

+1

Bạn kiên trì STE của bạn giữa các yêu cầu (ví dụ như GET -> POST) như thế nào? –

+0

@jfar, trong kịch bản WCF, khái niệm "Dịch vụ độc lập nền tảng" bị mất nếu bạn sử dụng STE (a.k.a Thực thể theo dõi tự). Ví dụ, nếu có một ứng dụng khách Java muốn tương tác với dịch vụ WCF. Ứng dụng Java Client sẽ nhận các SET ở phía máy khách như thế nào? Thật không may, nó chỉ đơn giản là không thể! Có nghĩa là, nếu chúng ta đang sử dụng STEs thì dịch vụ WCF của chúng ta chỉ có thể được sử dụng bởi các máy khách được xây dựng trong .Net. Đó là khủng khiếp phải không? – Baig

2

Nếu dịch vụ này sẽ được tiêu thụ bởi bất kỳ ứng dụng nào bạn không có quyền kiểm soát trực tiếp, bạn nên cân nhắc việc ly dị bất cứ điều gì liên quan đến EF (hoặc nHibernate hoặc Linq2Sql hoặc bất kỳ giải pháp quản lý dữ liệu nào khác) từ các dịch vụ của bạn và các đối tượng chuyển dữ liệu của bạn. Điều này sẽ cách nhiệt những thay đổi nội bộ từ việc phá vỡ các khách hàng. Breaking khách hàng thường là một điều xấu.

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