यह निर्णय आप के उपयोग पर निर्भर करता है सेवा WCF (एक समाधान के लिए ऊपर सूचीबद्ध ब्लॉग की जाँच करें):
- आप द्वारा खपत आंतरिक सेवा ही नेट प्रणाली, कि शेयर एक ही डोमेन मॉडल।
- विभिन्न प्लेटफार्मों द्वारा खपत बाहरी सेवा, जो समान डोमेन मॉडल साझा नहीं करती है।
केस 1.
क्रमबद्धता - वस्तु के राज्य बने की प्रक्रिया है। सी # में ऑब्जेक्ट की स्थिति को इसके डेटा फ़ील्ड द्वारा दर्शाया जाता है।
सी # में गुण अनिवार्य रूप से - विधियां हैं, जो वस्तु की स्थिति में हेरफेर करते हैं। उनका उपयोग करने से विभिन्न ऑब्जेक्ट स्टेट ऑफ डिस्टेरियलाइजेशन हो सकता है, क्योंकि जिस क्रम में गुण सेट किए गए हैं, उसके अंतिम डेटा स्थिति पर इसका असर हो सकता है। अन्य कारकों के परिणामस्वरूप गलत राज्य deserialization भी हो सकता है, उदाहरण के लिए विधि (संपत्ति सेट) वर्तमान दिनांक समय की तरह बदल रहे कुछ संदर्भ पर निर्भर करता है।
आप कह सकते हैं कि encapsulation के बारे में क्या? मैं नहीं चाहता कि मेरी वस्तु अमान्य स्थिति में हो, और मुझे सत्यापन जांच, ऑब्जेक्ट ग्राफ़ अखंडता जांच इत्यादि करना चाहिए। हां, आपको चाहिए, इसलिए हमने डेटामेम्बर अटॉर्प्स को प्रोप पर रखा है? सं।
यहां समस्या यह है कि बहुत से लोग डोमेन इकाई के साथ दो अलग-अलग चीजें, डीटीओ (डेटा ट्रांसफर ऑब्जेक्ट, डब्ल्यूसीएफ अनुबंध) मिश्रण करते हैं। आपको जो चाहिए वह यह सुनिश्चित करता है कि आपके द्वारा प्राप्त किया जाने वाला डेटा वही डेटा है जो भेजा गया था, और फिर सुनिश्चित करें कि आप इस डेटा से वैध डोमेन इकाई बना सकते हैं। इसे प्राप्त करने का सबसे अच्छा तरीका डीटीओ के लिए अलग-अलग वर्गों का उपयोग करना है, और उनसे डोमेन इकाई बनाना है।
लेकिन अधिकांश प्रोग्रामर आलसी हैं, और वे डेटामेमबर विशेषताओं के साथ डोमेन इकाई को सरल बनाना पसंद करते हैं। इस मामले में निर्णय फ़ील्ड या प्रो इस बात पर निर्भर करता है कि आपका सत्यापन तर्क कहां है, यदि आपका सत्यापन तर्क सेट विधियों में दफनाया गया है, तो आपको प्रॉप्स का उपयोग करना होगा, अगर यह बाह्य है तो आपको फ़ील्ड्स का उपयोग करना चाहिए, और वांछितकरण के बाद डोमेन एंटिटी को सत्यापित करना होगा।
पीएस मुझे लगता है कि समान नियम किसी भी धारावाहिक प्रक्रिया पर लागू होते हैं, जैसे डाटा बेस पर्सिस्टेंस।
इसके अलावा, मैं यह उल्लेख करना चाहूंगा कि सिल्वरलाइट निजी क्षेत्रों को \ deserialize नहीं कर सकता है, क्योंकि आप उन्हें प्रतिबिंब का उपयोग करके बाहर से नहीं पहुंच सकते हैं, और आपको उन्हें निजी बनाना होगा और InternalsVisibleToAttribute का उपयोग करना होगा।
प्रकरण 2.
यह कठिन एक है। यहां मुख्य फोकस अंतःक्रियाशीलता है। 99.9% में आपके पास इस मामले में अलग-अलग डीटीओ कक्षाएं होंगी और अधिकतर पुराने ग्राहकों का समर्थन करने के लिए उनमें से कई अलग-अलग संस्करण होंगे। इससे कोई फ़र्क नहीं पड़ता कि आपने डेटामेम्बर को इस पर अटैचमेंट किया है, क्योंकि आप डीटीओ का उपयोग करते हैं। मैं इस परिदृश्य को समझाने से परेशान नहीं हूं, क्योंकि ऐसे बड़े पैमाने पर सिस्टम पर काम करने वाले डेवलपर्स आमतौर पर काफी अनुभवी होते हैं, और वे एसओ पढ़ने को परेशान नहीं करते हैं।
आपको एक निजी वैरिएबल डेटा सदस्य बनाने की आवश्यकता नहीं है। –