2008-08-22 12 views
12

मैंने देखा है कि कुछ हद तक डब्ल्यूसीएफ अनुप्रयोगों ने अपनी वस्तुओं को अलग-अलग "तोड़ने" का चयन किया है; यानी, एक प्रोजेक्ट में डेटाऑब्जेक्ट्स असेंबली हो सकती है जिसमें एक अर्थपूर्ण क्लास लाइब्रेरी के अलावा डेटाकंट्रैक्ट्स/सदस्य होते हैं जो व्यावसायिक तर्क करते हैं।ऑब्जेक्ट मॉडल डिज़ाइन में आप किस डब्ल्यूसीएफ सर्वोत्तम प्रथाओं का पालन करते हैं?

क्या यह अनावश्यक स्तर का अनावश्यक स्तर है? क्या डाटाकंट्रैक्ट जानकारी के साथ मौजूदा कक्षा पुस्तकालयों के माध्यम से जाने और टैग करने के साथ जुड़े कोई अंतर्निहित बुराई है?

इसके अलावा, एक तरफ के रूप में, आप त्रुटि स्थितियों को कैसे संभालेंगे? सेवा (अमान्य ऑपरेशन, ArgumentException और इतने पर) से अपवाद फेंक दिया जाता है आम तौर पर स्वीकार किया जाता है, या आमतौर पर इसके आसपास एक स्तर है?

उत्तर

17

डेटा अनुबंध/संदेश अनुबंध से आंतरिक व्यावसायिक वस्तुओं को अलग करने का मुख्य कारण यह है कि आप अपने ऐप में आंतरिक परिवर्तनों को सेवा अनुबंध को बदलने के लिए आंतरिक परिवर्तन नहीं चाहते हैं। यदि आप वर्जन वाली वेब सेवाओं (कार्यान्वित इंटरफेस के 1 से अधिक संस्करणों के साथ) बना रहे हैं तो आपके पास अक्सर डेटा अनुबंध/संदेश अनुबंध ऑब्जेक्ट्स के 1 से अधिक संस्करण वाले आपके ऐप्स व्यवसाय ऑब्जेक्ट का एक संस्करण होता है।

इसके अलावा, जटिल एंटरप्राइज़ एकीकरण परिस्थितियों में आपके पास अक्सर एक कैननिकल डेटा प्रारूप (डेटा और संदेश अनुबंध) होता है जो कई अनुप्रयोगों द्वारा साझा किया जाता है, जो प्रत्येक एप्लिकेशन को अपने आंतरिक ऑब्जेक्ट मॉडल में कैननिकल डेटा प्रारूप को मैप करने के लिए मजबूर करता है।

यदि आप डेटा अनुबंध/संदेश अनुबंध आदि को अलग करने के लिए एक उपकरण चाहते हैं, तो माइक्रोसॉफ्ट की वेब सर्विसेज सॉफ्टवेयर फैक्टरी http://msdn.microsoft.com/en-us/library/cc487895.aspx देखें, जिसमें डब्ल्यूसीएफ प्लंबिंग को हल करने के लिए कुछ अच्छी व्यंजन हैं।

उत्साह के संबंध में, डब्ल्यूसीएफ स्वचालित रूप से फाल्टएक्सप्शन में सभी अपवादों को लपेटता है, जिन्हें वायर-फॉर्मेट दोषों के रूप में क्रमबद्ध किया जाता है।

जेनेरिक फॉल्ट अपवादों को फेंकना भी संभव है जो आपको धारावाहिक गलती के साथ अतिरिक्त विवरण निर्दिष्ट करने की अनुमति देता है।

[FaultContract(typeof(AuthenticationFault))] 
[FaultContract(typeof(AuthorizationFault))] 
StoreLocationResponse StoreLocation(StoreLocationRequest request); 

दोनों AuthenticationFault और AuthorizationFault प्रकार अतिरिक्त विवरण का प्रतिनिधित्व धारावाहिक और पर भेजा जा करने के लिए: चूंकि दोष एक वेब सेवा आपरेशन द्वारा फेंका अपने अनुबंध का हिस्सा हैं यह एक अच्छा विचार आपरेशन घोषणा पर दोष घोषित करने के लिए है तार और निम्नानुसार फेंक दिया जा सकता है:

throw new FaultException<AuthenticationFault>(new AuthenticationFault()); 

यदि आप अधिक जानकारी चाहते हैं तो चिल्लाओ; मैं इतनी देर तक इस सामान को सांस ले रहा हूं और सांस ले रहा हूं, मैं लगभग एक जीवित कर रहा हूं;)

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