2011-01-19 23 views
9

Tôi đang tìm những lý do vượt quá các tham số "thông thường" gây nhầm lẫn và cho biết phương thức đang làm nhiều hơn một đối số kiểu "" và nhiều hơn nữa về những gì đặc biệt xấu về các tham số đầu ra trong các dịch vụ WCF. Bây giờ tôi làm việc, chúng tôi có một quy tắc chống lại họ trong các dịch vụ WCF, và tôi đang cố gắng giải thích tại sao!Có thực hành không tốt để có tham số đầu ra trong một phương thức trong dịch vụ WCF không?

Trả lời

26

Cá nhân, tôi sử dụng các tham số ở những nơi cụ thể (chẳng hạn như phương thức có tên TryParse()). Vì vậy, tôi có một số thiên vị mà bạn đã nói về nơi tôi chỉ sử dụng nó ở những địa điểm cụ thể, hạn chế. Ngoài ra, bạn không thể giả định rằng một ứng dụng .Net sẽ tiêu thụ nó ở đầu bên kia. Bởi vì WCF cung cấp một giao diện tiêu hao như một SOAP hoặc dịch vụ web REST (trong số các loại giao tiếp khác), tôi không thể đảm bảo rằng WCF thậm chí sẽ hỗ trợ các tham số cho khả năng tương thích với người tiêu dùng non -.Net.

Ngoài ra, dịch vụ WCF đang cung cấp API cho người tiêu dùng và API nên cung cấp giao diện cần được tiêu thụ với kiến ​​thức hạn chế về cách các phương thức máy chủ được mã hóa. (Đừng đoán anh chàng viết máy chủ WCF là cùng một người viết khách hàng ở đầu kia). Cố gắng sử dụng một tham số ngoài trên một API có vẻ như một mùi mã. Có lẽ, người ta sẽ sử dụng một tham số ngoài để trả lại (các) giá trị khác cho người tiêu dùng. Hãy xem xét thay vì sử dụng một đối tượng tin nhắn. Một đối tượng tin nhắn được đặc biệt bao gồm tất cả các mẩu dữ liệu cần được gửi từ máy chủ WCF đến người tiêu dùng của nó. Ví dụ, giả sử bạn có một phương pháp tiếp xúc trong một máy chủ WCF gọi TryCreateUser:

bool TryCreateUser(string name, string email, out User user){} 

nơi bạn có ý định trả lại một bool chỉ ra nơi người dùng tạo ra xảy ra thành công và một đối tượng tài chứa người dùng nếu nó thành công. Tôi sẽ tạo một lớp mới, UserCreationMessage:

class UserCreationMessage { 
    bool IsSuccessful; 
    User user; 
} 

Trả lại đối tượng thông điệp này lại cho người tiêu dùng và bạn vẫn có thể nhận được nhiều giá trị trả lại. Tuy nhiên, bây giờ bạn có một đối tượng mạch lạc được trả về, điều đó giải thích nhiều hơn cho người dùng cuối của API. Cuối cùng, tôi muốn lý do thực hành không tốt để có tham số ngoài trong API, chẳng hạn như máy chủ WCF vì người lập trình tạo người tiêu dùng cho dịch vụ này phải có thể dễ dàng xem API và tiêu thụ nó mà không nhảy qua các vòng mà một tham số hiện tại. Vì thiết kế tốt hơn cho điều này tồn tại, hãy sử dụng nó. API yêu cầu các tiêu chuẩn mã hóa cao hơn, đặc biệt là trong giao diện tiếp xúc với người tiêu dùng cuối cùng.

+0

+1 để đề cập đến đối tượng tin nhắn. – slugster

5

Một lý do là thông số out được xử lý bởi lớp proxy được tạo khi bạn thêm tham chiếu dịch vụ - đó là phí phụ trội.

Một lý do khác: theo this post, ngay cả khi out tham số ban đầu là cuối cùng khi bạn tiêu thụ nó, nó trở thành đầu tiên - khó hiểu và có thể dẫn đến sai sót biến chứng có thể mất thời gian để giải quyết cho đến khi ai đó phát hiện này ra.

Ý kiến ​​cá nhân: hoạt động WCF (phương pháp) nên làm điều gì đó và trả lại một cái gì đó. Nó có thể làm rất nhiều thứ, nhưng chỉ trả lại một thứ mà là kết quả - nếu bạn cần thêm công cụ, nó sẽ trả về kiểu phức tạp với mọi thứ bạn cần làm các trường dữ liệu thuộc loại đó.

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