2010-09-08 25 views
6

Tôi có hợp đồng dữ liệu cho biết Người dùng. Nó là serializable và đi qua dây. Tôi muốn một Người vận hành hợp đồng SaveUser(). Tôi có thể giữ SaveUser (User user) trong hợp đồng dịch vụ của tôi như một hợp đồng hoạt động. Nhưng liệu tôi có thể giữ nó bên trong bản thân hợp đồng dữ liệu của mình như là hành vi riêng của nó?Hợp đồng dữ liệu WCF có thể chứa hợp đồng hoạt động WCF bên trong nó không? Tại sao?

Lưu() lý tưởng nên tự lưu. Vì vậy, theo nguyên tắc OO, mọi hợp đồng dữ liệu nên biết cách tự lưu và các chi tiết phải được trừu tượng hóa từ thế giới bên ngoài.

Điều này có thể thực hiện được trong WCF không?

Trả lời

9

Tôi sẽ nói không, và đúng như vậy. Mặc dù tôi đồng ý với bạn về các nguyên tắc và đóng gói của OO, WCF giao dịch với các nguyên tắc SO (Service Oriented). Hãy suy nghĩ về điều này về CD Player và CD. CD Player là Dịch vụ. CD là hợp đồng dữ liệu. Các nguyên tắc OO sẽ yêu cầu đĩa CD có phương thức Play để có thể tự phát. Nhưng, có rất nhiều thứ để chơi đĩa CD hơn là biết dữ liệu của nó. Có các thiết bị điện tử, giao diện cho các jack cắm đầu ra, vv Đây là tất cả được cung cấp bởi CD Player ... Dịch vụ. Vì vậy, đó là lý do tại sao Hợp đồng dịch vụ của bạn có phương thức Play và chấp nhận CD làm Hợp đồng dữ liệu cho biết GÌ để chơi (và không phải CÁCH chơi).

CHỈNH SỬA sau câu hỏi trong nhận xét của bạn: Không chắc chắn (hy vọng) không. Trường hợp xấu nhất là bạn sẽ có 34 Hợp đồng dịch vụ, mỗi hợp đồng có trung bình 6 phương pháp. Và đây chỉ là trường hợp nếu bạn chắc chắn rằng mọi phương thức trên mỗi lớp PHẢI xảy ra như một hoạt động dịch vụ. Có 2 khía cạnh bạn cần cân nhắc. Khía cạnh 1: Thiết kế các dịch vụ của bạn. Thay vì 34 Hợp đồng dịch vụ, bạn nên nhóm 34 lớp thành một nhóm có ý nghĩa và tạo 1 Hợp đồng dịch vụ cho mỗi nhóm. Ví dụ, bạn có thể kết thúc với một dịch vụ quản lý kho lưu trữ, và một dịch vụ SalesOrderProcessing và một dịch vụ BackOfficeOperations. Mỗi dịch vụ này chứa các hoạt động dịch vụ (và các Hợp đồng Dữ liệu) có liên quan đến phạm vi các lớp được nhóm vào miền của chúng. Khía cạnh 2: Điều gì đang xảy ra trên máy khách. Tôi đã đề cập rằng bạn phải xem xét liệu các phương thức của mỗi lớp PHẢI là các Hoạt động Dịch vụ WCF. Có chắc chắn là một trường hợp có các lớp học kinh doanh phong phú hoàn toàn đóng gói trên máy khách. Và nơi các hoạt động của họ không cần thực hiện như các hoạt động dịch vụ, các hoạt động này thực thi logic của chúng trong miền ứng dụng khách. Câu hỏi sẽ trở thành cách để đưa chúng đến máy khách thông qua dịch vụ, và ở đây bạn có hai lựa chọn thay thế: a) khởi tạo một cá thể trên máy khách và điền các thuộc tính của nó từ DataContract được trả về bởi một hoạt động dịch vụ. b) trả lại đối tượng trực tiếp từ một hoạt động dịch vụ, như được thực hiện trong một khuôn khổ như CSLA (và tôi nghĩ DevForce tuân theo cách tiếp cận tương tự để trả lại các lớp kinh doanh thông qua một Dịch vụ WCF). HTH

+1

Vì vậy, nếu tôi có khoảng 34 lớp với 6 phương pháp công khai ở mức trung bình trong mỗi lớp, tôi có 204 phương thức trình bao trong dịch vụ không? được không? –

+0

Câu trả lời hay ... Rất hữu ích để xóa những nghi ngờ của tôi. – Pranav

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