2010-10-18 13 views
5

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

लोगों को अपनी सोच के तरीके से दूर करने की कोशिश किए बिना, मैं लोगों से निष्पक्ष जवाब प्राप्त करना चाहता हूं कि डीटीओ किस परत में उपस्थित हो सकता है। सभी परतें; डीएएल, बीएल और प्रेजेंटेशन या इन परतों के भीतर केवल एक छोटा उप सेट।

इसके अलावा, क्या आईएलआईएल वस्तुओं को डीएएल में उपस्थित होना चाहिए या नहीं होना चाहिए।

धन्यवाद।

+2

@leppie: http://rlacovara.blogspot.com/2009/03/what-is-difference-between-dto-and-poco.html – tsimbalar

+1

डेटा ट्रांसफर ऑब्जेक्ट - हल्का, और (आमतौर पर) संदर्भ मुक्त एक व्यापार डोमेन ऑब्जेक्ट (या ऑब्जेक्ट्स) का संस्करण। –

+0

क्षमा करें लेप्पी, मुझे नहीं लगता कि हर कोई शब्दकोष जानता है। –

उत्तर

5

यह वास्तव में आपके वास्तुकला पर निर्भर करता है।

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

आप एक ठोस संग्रह या सरणी पर एक IList/ICollection/IEnumerable लौट जाना चाहिए।

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

आप इस तरह के विंडसर के रूप में जल्दी ही बजाय बाद इंटरफेस मैं एक आईओसी को एकीकृत सुझाव है कि उपयोग करने के लिए शुरू करते हैं। यदि आप इसे पाने से करते हैं तो यह चीजों को बाद में आसान बना देगा।

+0

इस मार्ग मैं नीचे जाने के लिए देख रहा था, विशेष रूप से आईओसी और निर्भरता इंजेक्शन तकनीक के और अधिक है , और वास्तव में यह है कि मैं कार्यालय में अन्य डेवलपर को समझाने की कोशिश कर रहा था। –

2

एक बात यह है कि डेटासेट्स इंटरऑपरेबिलिटी प्राप्त करने के लिए गरीब हैं। गैर-नेट क्लाइंट से टाइप किए गए डेटासेट का उपभोग करने के लिए यहां तक ​​कि टाइप किए गए डेटासेट भी संगत नहीं होते हैं। this link देखें। यदि आपको अंतःक्रियाशीलता प्राप्त करना है तो डीटीओ के लिए कड़ी मेहनत करें अन्यथा आपकी टीम को समय-समय पर डीटीओ को समझने की कोशिश करें क्योंकि डेटासेट सभी के बाद इतना बुरा नहीं है।

इंटरफेस के हिस्से पर, हाँ आपको इंटरफेस का खुलासा करना चाहिए। उदाहरण के लिए - यदि आप डीएएल से List<T> लौट रहे हैं, तो आपको IList<T> वापस करना चाहिए। कुछ लोग केवल IEnumerable<T> लौटने की सीमा तक जाते हैं क्योंकि आपको जितनी भी आवश्यकता है, वह गणना करने की क्षमता है। लेकिन फिर ऐसा करते समय astronaut architect बनें नहीं।

मेरी अनुप्रयोगों में मैं पता लगा है कि लौटने List<T> के बजाय IList<T> इस तरह कोड के साथ मेरी कोड बेस को प्रदूषित करता है:

//consider personCollection as IList<Person> 
(personCollection as List<Person>).ForEach(//Do Something) 

तो मैं व्यक्तिगत रूप से लौटने इंटरफ़ेस या ठोस वस्तु के बीच एक संतुलन बनाए रखने के लिए प्रयास करें। यदि आप मुझसे पूछें कि मैं अभी क्या कर रहा हूं, तो मैं आपको बताउंगा कि मैं List<T> लौट रहा हूं। मैं astronaut architect बनने के लिए प्रभावित नहीं हूं।

+0

धन्यवाद प्रदीप (और संपादन के लिए भी)। –

+2

एक सामान्य सूची http://msdn.microsoft.com/en-US/library/ms182142(v=VS.80).aspx वापस नहीं लिए एक कारण नहीं है। यह निर्भर करता है कि सूची लौटने वाली वस्तु सार्वजनिक या निजी है या नहीं। जब तक आप सार्वजनिक इंटरफ़ेस पर सूची का खुलासा नहीं कर रहे हैं, इससे कोई फर्क नहीं पड़ता क्योंकि केवल आप ही इसका उपभोग कर रहे हैं। – Bronumski

+1

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

1

मैं हमेशा डीटीओ का उपयोग करता हूं, डेटाटेबल कभी नहीं। लेकिन मैं केवल उन्हें बीएल से डीएल और दूसरी तरफ स्थानांतरित करने के लिए उपयोग करता हूं। सेवा प्रस्तुति के मामले में मेरी प्रस्तुति परतें अक्सर व्यापार और सेवा परतों के बारे में जागरूक होती हैं।

लाभ मैं datatables बजाय DTOs उपयोग करने के लिए देख सकते हैं:

  • आसान आरेख उत्पादन
  • क्लीनर अधिक पठनीय कोड

    • आसान रिफैक्टरिंग, विशेष रूप से में दाल की इकाई का परीक्षण करती है
  • +0

    धन्यवाद वीसी - सीधे मेरे प्रश्न के बिंदु पर, डीटीओ को एक आईनेमरेबल या इसी तरह बंडल करने की कोई राय? –

    +0

    क्या आपका मतलब है उदाहरण के लिए डीएएल में GetDustomers विधि को आईएलआईस्ट या ग्राहक डीटीओ के IENumerable लौटने की अनुमति दें? यदि ऐसा है, तो मुझे कोई कारण नहीं दिख रहा है कि आपको इसकी अनुमति क्यों नहीं देनी चाहिए। –

    +0

    धन्यवाद कुलपति - था कि मैं वास्तव में क्या मतलब –

    1

    परिभाषा के अनुसार एक डीटीओ एक डाटा ट्रांसफर ऑब्जेक्ट होता है, जिसका इस्तेमाल डेटा (एक के लिए प्रतीक्षा करें) डेटा को एक परत से दूसरे में स्थानांतरित करता है।

    डीटीओ का उपयोग सभी परतों में किया जा सकता है और मैंने उन्हें वेब सेवाओं के साथ अच्छी तरह से उपयोग किया है।

    +1

    धन्यवाद बर्ट, मैं प्रकट 'जिस तरह से आप क्या एक डीटीओ है :) –

    +0

    कोई चिंता नहीं चाहते, डोमेन संचालित डिजाइन पर एक नज़र के रूप में DTOs उस में दिखाया जा रहा है। डीडीडी का उपयोग कर जटिल व्यावसायिक नियमों के समाधान के साथ समाधान के बारे में कुछ उत्कृष्ट उदाहरण हैं। – Burt

    +0

    यहाँ के लिए लिंक के एक जोड़े हैं आप http://dddpds.codeplex.com/ http://ncommon.codeplex.com/ – Burt

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