2009-07-13 11 views
7

यह कितना बुरा है? मैंने अनगिनत लेख पढ़े हैं और पहले कभी व्यवहार के साथ अमूर्त डेटाकंट्रैक्ट नहीं बनाए हैं, लेकिन ऐसा लगता है कि ऐसा करने से मुझे एक समस्या हल हो जाएगी जो मुझे सबक्लस कार्यान्वयन निर्धारित करने के लिए हर जगह कारखानों को बनाने से रोक देगा। मेरा सवाल है, अगर मैं अपने डेटा अनुबंधों में व्यवहार जोड़ने का फैसला करता हूं तो क्या मुझे दंडित किया जाएगा? निस्संदेह उन्हें उपभोग नहीं किया जा सकता है और रिपॉजिटरी कॉल का आविष्कार करने से पहले उस सबक्लास प्रकार के लिए विशिष्ट कुछ संचालन करने के लिए हैं और डेटा जारी है। मैं प्रत्येक सबक्लास के लिए "प्रबंधक" कक्षाएं बना सकता हूं लेकिन यह मुझे कारखानों में वापस रखता है और मैं एक और बहुलक दृष्टिकोण की कोशिश कर रहा हूं। अग्रिम में धन्यवाद।व्यवहार के साथ डेटाकंट्रैक्ट

उत्तर

7

क्यों आप क्लासिक फैशन में अपना डेटा अनुबंध (MyDataContract) नहीं बना सकते हैं, केवल डेटा फ़ील्ड, और कुछ नहीं, और फिर अपनी व्यवहार कक्षा प्राप्त कर सकते हैं?

public class BehaviorialClass : MyDataContract 
{ 
..... 
} 

इस तरह, आप चिंताओं का एक अच्छा, स्वच्छ जुदाई है, अपने डेटा अनुबंध व्यवहार यह वास्तव में वैसे भी साथ सौदा नहीं कर सकते द्वारा "प्रदूषित" नहीं है .....

मार्क

6

सीधे आपके डेटाकंट्रैक्ट्स में व्यवहार डालने के लिए एक अच्छा समझौता व्यवहारों को extension methods के रूप में या तो आपके अनुबंध या एक अलग असेंबली के समान असेंबली में परिभाषित करेगा। वैकल्पिक रूप से, डेटा और व्यवहार को अलग करने के लिए अनुबंध विधियों को अनुबंधों से अलग नामस्थान में रखा जा सकता है।

इस तरह आपके अनुबंध साफ रखा जाता है लेकिन साथ ही, आपके अनुबंधों के .NET उपभोक्ताओं के पास उन डेटाकंट्रैक्ट्स से संबंधित अतिरिक्त कार्यक्षमता आयात करने का एक आसान तरीका होगा।

12

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

सब कुछ, मुझे लगता है कि डेटा आंकड़ों को डेटा अनुबंध होने और उनके व्यवहार को छोड़ने के लिए बेहतर होगा।

+0

'मुझे लगता है कि डेटा आंकड़ों को डेटा अनुबंध होने और उनके व्यवहार को छोड़ने के लिए बेहतर होगा।' उसमें आओ! –

0

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

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