2011-01-19 9 views
9

मैं सामान्य से परे कारणों की तलाश में हूं "आउट पैरामीटर उलझन में हैं और संकेत देते हैं कि विधि एक से अधिक चीजें कर रही है" -स्टाइल तर्क और डब्ल्यूसीएफ सेवाओं में आउटपुट पैरामीटर के बारे में विशेष रूप से खराब क्या है। जहां मैं अभी काम करता हूं, हमारे पास डब्ल्यूसीएफ सेवाओं में उनके खिलाफ एक नियम है, और मैं काम करने की कोशिश कर रहा हूं क्यों!क्या डब्ल्यूसीएफ सेवा में किसी विधि में आउटपुट पैरामीटर रखने का बुरा अभ्यास है?

उत्तर

26

व्यक्तिगत रूप से, मैं विशिष्ट स्थानों (जैसे TryParse() नामक विधियों) में पैरामीटर का उपयोग करता हूं। तो, मेरे पास कुछ पूर्वाग्रह हैं जिनके बारे में आपने बात की है, जहां मैं केवल विशिष्ट, सीमित स्थानों में इसका उपयोग करता हूं। इसके अलावा, आप यह नहीं मान सकते कि एक नेट एप्लिकेशन दूसरे छोर पर इसका उपभोग करेगा। चूंकि डब्ल्यूसीएफ एक एसओएपी या आरईएसटी वेब सेवा (अन्य संचार प्रकारों के बीच) के रूप में उपभोग योग्य इंटरफ़ेस प्रदान करता है, इसलिए मैं गारंटी नहीं दे सकता कि डब्ल्यूसीएफ गैर-नेट उपभोक्ताओं के साथ संगतता के लिए भी पैरा का समर्थन करेगा।

इसके अलावा, एक डब्ल्यूसीएफ सेवा उपभोक्ता को एक एपीआई प्रदान कर रही है, और एपीआई को एक इंटरफ़ेस प्रदान करना चाहिए जिसे सर्वर विधियों को कोड किए जाने के सीमित ज्ञान के साथ उपभोग किया जाना चाहिए। (डब्ल्यूसीएफ सर्वर लिखने वाले लड़के को दूसरी तरफ क्लाइंट लिखने वाला व्यक्ति नहीं मानें)। एपीआई पर एक आउट पैरा का उपयोग करने का प्रयास कोड गंध की तरह लगता है। संभवतः, उपभोक्ता को एक और मूल्य वापस करने के लिए एक बाहरी परम का उपयोग करेगा। एक संदेश वस्तु का उपयोग करने के बजाय विचार करें। एक संदेश ऑब्जेक्ट विशेष रूप से डेटा के सभी टुकड़ों से बना होता है जिन्हें डब्ल्यूसीएफ सर्वर से अपने उपभोक्ता को भेजने की आवश्यकता होती है।

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

जहाँ आप एक bool का संकेत है और एक उपयोगकर्ता उपयोगकर्ता युक्त अगर यह सफल रहा वस्तु जहां उपयोगकर्ता निर्माण सफलतापूर्वक हुआ वापसी करना चाहते हैं: उदाहरण के लिए, मान लीजिए कि आप एक विधि TryCreateUser नामक एक WCF सर्वर में उजागर डालते हैं। मैं एक नया वर्ग, UserCreationMessage बनाना होगा:

class UserCreationMessage { 
    bool IsSuccessful; 
    User user; 
} 

वापसी इस संदेश को वापस उपभोक्ता के लिए वस्तु, और आप अभी भी एक से अधिक मान लौटे मिल सकती है। हालांकि, अब आपके पास एक सुसंगत वस्तु वापस आ रही है जो एपीआई के अंतिम उपयोगकर्ता के लिए अधिक व्याख्यात्मक है।

अंत में, मुझे लगता है कि एक एपीआई में आउट पैरामीटर होने का बुरा अभ्यास है, जैसे कि डब्ल्यूसीएफ सर्वर क्योंकि इस सेवा के लिए उपभोक्ता बनाने वाले प्रोग्रामर एपीआई को आसानी से देख सकते हैं और उपभोग कर सकते हैं यह हुप्स के माध्यम से कूदने के बिना बाहर एक परम उपस्थित है। चूंकि इसके लिए एक बेहतर डिजाइन मौजूद है, इसका उपयोग करें। एपीआई के लिए उच्च कोडिंग मानकों की आवश्यकता होती है, खासकर अंत उपभोक्ता के संपर्क में आने वाले इंटरफ़ेस में।

+0

+1। – slugster

5

एक कारण यह है कि out पैरामीटर प्रॉक्सी क्लास द्वारा प्रबंधित किए जाते हैं जब आप सेवा संदर्भ जोड़ते हैं - यह अतिरिक्त ओवरहेड है।

एक और कारण: this post के अनुसार, यदि मूल out पैरामीटर आपके उपभोग करते समय अंतिम होता है, तो यह पहली बार भ्रमित हो जाता है और जटिलता त्रुटियों का कारण बन सकता है जो किसी को इसका आंकड़ा होने तक हल करने में समय लग सकता है।

व्यक्तिगत राय: डब्ल्यूसीएफ ऑपरेशन (विधि) कुछ करना चाहिए और कुछ वापस करना चाहिए। यह बहुत सी चीजें कर सकता है, लेकिन परिणाम केवल एक चीज लौटाएं - यदि आपको अतिरिक्त सामान की आवश्यकता है तो बस उस प्रकार के डेटा फ़ील्ड्स के रूप में आपको आवश्यक सभी चीज़ों के साथ जटिल प्रकार वापस कर दें। संदेश वस्तु का उल्लेख करने के लिए

संबंधित मुद्दे

 संबंधित मुद्दे