2008-09-01 17 views
13

के लिए डेटासेट का उपयोग न करने के लिए मेरे सहकर्मियों को कैसे समझाया जाए, जिनके साथ मैं काम करता हूं, वे एंटरप्राइज़ विकास के लिए डेटा-केंद्रित दृष्टिकोण से ग्रस्त हैं और कस्टम संग्रह/ऑब्जेक्ट्स का उपयोग करने के विचार से नफरत करते हैं। अन्यथा उन्हें मनाने के लिए सबसे अच्छा तरीका क्या है?एंटरप्राइज़ डेवलपमेंट (.NET 2.0+)

उत्तर

10

यदि आप विरासत कोड (उदा।, .NET 1.x से 2.0 या 3.5 तक पोर्ट किए गए ऐप्स) तो डेटासेट से प्रस्थान करना एक बुरा विचार होगा। कुछ ऐसा क्यों बदलता है जो पहले से ही काम करता है?

आप, हालांकि, एक नए एप्लिकेशन बनाने, वहाँ कुछ चीजें है कि आप अदालत में तलब कर सकते हैं:

  • अपील है कि डेटासेट के साथ चिपके रहते हैं क्षुधा को बनाए रखने में दर्द का सामना करने के लिए
  • के लिए प्रदर्शन लाभ उद्धृत करें आपका नया दृष्टिकोण
  • उन्हें एक अच्छे मध्य-मैदान के साथ बाइट करें। उदाहरण के लिए .NET 3.5 पर जाएं, और LINQ से SQL को बढ़ावा दें, उदाहरण के लिए: डेटा-संचालित आर्किटेक्चर पर चिपके रहते हुए, स्ट्रिंग-इंडेक्स किए गए डेटा सेटों के लिए एक विशाल, विशाल प्रस्थान है, और लागू करता है ... voila! कस्टम संग्रह - एक तरह से जो उनसे छिपा हुआ है।

महत्वपूर्ण बात यह है कि जो भी दृष्टिकोण आप उपयोग करते हैं वह लगातार बना रहता है, और आप अपने दृष्टिकोण के पेशेवरों और विपक्ष के साथ पूरी तरह से ईमानदार हैं।

यदि सब और विफल रहता है (उदाहरण के लिए, आप एक विकास दल है कि पूरी तरह से पुरानी प्रथाओं से मानने से मना कर दिया और नई चीजें सीखने की उलझन में है), यह एक बहुत, बहुत स्पष्ट संकेत कि आप अपनी टीम पार कर लिया है अब आपकी कंपनी छोड़ने का समय है!

+1

लिंक 2 एसक्यूएल को बढ़ावा देना? एल 2 एस मर चुका है - इसके बजाय ईएफ को बढ़ावा देना। – stephbu

+2

@stephbu - और ईएफ भारी संशोधन के तहत है, इसलिए न तो (वर्तमान रूप में) एक अच्छी शर्त लंबी अवधि है। लेकिन एल 2 एस को कम निवेश/जटिलता की आवश्यकता होती है, इसलिए (वर्तमान प्रवाह दिया जाता है) जो इसे ईएफ आईएमओ से अधिक आकर्षक बनाता है। –

+3

चलो देखते हैं ... एल 2 एस मर चुका है ... ईएफ भारी संशोधन के तहत है ... अरे!डेटासेट बहुत स्थिर प्रतीत होता है, शायद हमें उनका उपयोग करना चाहिए! ;-) –

3

डेटासेट/टेबल इतने खराब नहीं हैं?

सबसे अच्छी सलाह है कि मैं इसे अपने कोड में जितना कर सकूं उतना उपयोग कर सकता हूं, और उम्मीद है कि सहकर्मी समीक्षा और बगफिक्स के माध्यम से, अन्य डेवलपर्स देखेंगे कि कोड कैसे और अधिक पठनीय हो जाता है। (इन घटनाओं के होने पर बिंदु को धक्का देना सुनिश्चित करें)।

आखिरकार यदि कोड काम करता है, तो शेष अर्थशास्त्र मेरा विचार है।

21

उदाहरण के द्वारा इसे करें और हल्के से चलें। कुछ भी मजबूत आपको बस टीम के बाकी हिस्सों से अलग कर देगा।

इस बात पर विचार करना याद रखें कि वे आपके द्वारा याद की गई किसी चीज़ पर हैं। एक टीम का हिस्सा होने का मतलब है & शिक्षण सीखना।

कोई भी व्यक्ति के पास सभी जवाब नहीं हैं।

2

मुझे लगता है कि आप ओ/आर मैपिंग और मैपर टूल्स के विचार को बेचने का प्रयास कर सकते हैं। वस्तुओं के रूप में पंक्तियों का इलाज करने का लाभ बहुत शक्तिशाली है।

+0

आपको दिमाग है, इसलिए पंक्तियों के रूप में पंक्तियों के रूप में उन्हें कृत्रिम ओओ शर्तों में मजबूर करने के बजाय उन्हें वास्तव में क्या करने की आवश्यकता है। – gbjbaanb

9

इस बात पर विचार करना याद रखें कि वे आपके द्वारा याद की गई किसी चीज़ पर हैं। एक टीम का हिस्सा होने का मतलब है & शिक्षण सीखना।

सेकेंड। संपूर्ण विचार है कि "उद्यम विकास" किसी भी तरह से अलग है (और आमतौर पर निहितार्थ 'से अधिक महत्वपूर्ण' है) सामान्य विकास वास्तव में मुझे परेशान करता है।

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

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

इसी प्रकार आप केवल विपक्ष पर स्कर्ट नहीं कर सकते हैं जैसे कि इससे कोई फर्क नहीं पड़ता, आपके सहकर्मी आपको कॉल करेंगे।
यदि आप इन चीजों को नहीं करते हैं, या जो आप व्यक्तिगत रूप से पसंद करते हैं, उसे दबाकर आते हैं, तो कोई भी आपको गंभीरता से लेने वाला नहीं है, और आपको उस व्यक्ति होने के लिए प्रतिष्ठा मिलेगी जो उत्साह और ऊर्जा से भरा है लेकिन कुछ भी नहीं के बारे में कोई जानकारी नहीं है।

बीटीडब्ल्यू। इस विशेष con के लिए देखो।

  • आवश्यक 12+ हमारे मौजूदा कोड पोर्टिंग महीने काम: यह तुरुप का सब कुछ, जब तक आप अपने सभी अन्य सामान के लिए मजबूत मामलों की एक बहुत होगा। तुम हारे।
7

बेशक, स्थिति पर "यह निर्भर करता है"। कभी-कभी डेटासेट या डेटाटेबल्स अधिक उपयुक्त होते हैं, जैसे कि यह वास्तव में सुंदर प्रकाश व्यवसाय तर्क है, संस्थाओं/अभिलेखों के फ्लैट पदानुक्रम, या कुछ संस्करण क्षमताओं की विशेषता है।

कस्टम ऑब्जेक्ट संग्रह चमकते हैं जब आप गहरी पदानुक्रम/ग्राफ़ ऑब्जेक्ट्स को कार्यान्वित करना चाहते हैं जिन्हें फ्लैट 2 डी टेबल में कुशलता से प्रदर्शित नहीं किया जा सकता है। आप जो प्रदर्शित कर सकते हैं वह वस्तुओं का एक बड़ा ग्राफ है और कुछ शाखाओं को अन्य शाखाओं में अनुचित वस्तुओं का आह्वान किए बिना सही शाखाओं को फैलाने के लिए प्राप्त करना है। इस तरह बच्चे के रिकॉर्ड प्राप्त करने के लिए प्रत्येक डेटाटेबल के माध्यम से लूप या चयन करना जरूरी नहीं है।

उदाहरण के लिए, एक परियोजना में मैंने ढाई साल पहले शामिल किया था, एक यूआई मॉड्यूल था जो एक WinForms डेटाग्रिड में प्रश्नों और उत्तर नियंत्रण प्रदर्शित करना था (अधिक विशिष्ट होने के लिए, यह इन्फ्राजिस्टिक्स 'अल्ट्राग्रिड था)। कुछ और मुश्किल आवश्यकताओं

  • एक प्रश्न के लिए जवाब नियंत्रण कुछ भी हो सकता है - पाठ बॉक्स, बॉक्स विकल्प, रेडियो बटन विकल्पों की जाँच करें, ड्रॉप-डाउन सूची, या यहां तक ​​कि एक कस्टम संवाद बॉक्स खींच सकता है पॉप अप करने के एक वेब सेवा से अधिक डेटा।
  • उपयोगकर्ता द्वारा उत्तर दिए गए अनुसार, यह सीधे मूल प्रश्न के तहत प्रकट होने के लिए अधिक उप-प्रश्नों को ट्रिगर कर सकता है। यदि बाद में एक अलग उत्तर दिया जाता है, तो उसे उस उत्तर से संबंधित उप-प्रश्नों (यदि कोई हो) का एक और सेट बेनकाब करना चाहिए।

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

अराजक गड़बड़ी को ठीक करने के लिए दो महीने का टाईंग, मैंने इसे पूरे मॉड्यूल को object-oriented graph to solve this problem में फिर से डिजाइन करने के लिए लिया। हाँ, सार वर्गों के साथ पूर्ण (प्रश्न प्रकार के आधार पर एक ग्रिड सेल पर अलग-अलग उत्तर नियंत्रण प्रदान करने के लिए), प्रतिनिधि और घटनाक्रम। अंतिम परिणाम एक 2 डी डेटाग्रिड था जो सवालों के गहरे पदानुक्रम से जुड़ा हुआ था, स्वाभाविक रूप से माता-पिता की व्यवस्था के अनुसार क्रमबद्ध किया गया था। जब माता-पिता के प्रश्न का उत्तर बदल जाता है, तो यह बच्चों के प्रश्नों के लिए एक घटना उठाएगा और वे माता-पिता के जवाब के अनुसार ग्रिड में अपनी पंक्तियों को स्वचालित रूप से दिखाएंगे/छुपाएंगे। केवल उस वस्तु को प्रश्न पूछें जो पथ प्रभावित थे। पुरानी विधि की तुलना में इस समाधान की यूआई प्रतिक्रियाशीलता परिमाण के आदेशों से थी।

1

आप उन्हें अन्यथा मनाने नहीं दे सकते। एक छोटी चुनौती चुनें या एक अलग संगठन में ले जाएं। यदि आपका प्रबंधक आपको सम्मान करता है कि आप डोमेन-संचालित शैली में एक तकनीक परीक्षण के रूप में एक परियोजना कर सकते हैं या नहीं।

2

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

1

यदि आप प्रोफ़ाइल कर सकते हैं, तो बस इसे और प्रोफ़ाइल करें। डेटासेट भारी तो एक सरल Collection<T>

DataReaders तेजी से तो एडेप्टर का उपयोग कर रहे हैं ...

एक वस्तुओं में व्यवहार बदल रहा है वैसे भी एक डाटासेट

की मालिश की तुलना में काफी आसान है: बस कर, क्षमा के लिए नहीं पूछ अनुमति।

2

इसे एक धर्म या विश्वास चर्चा मत बनाओ। जो जीतना मुश्किल है (और वही नहीं है जो आप चाहते हैं)

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

मेरे पास डेटाबेस से डेटा एकत्र करने के लिए डेटाटेबल्स का उपयोग करने वाले डेवलपर्स थे और उसके बाद उस डेटा का उपयोग कर व्यवसाय तर्क कोड है ... और मैंने उन्हें दिखाया कि मैंने 100% CPU के 7 सेकंड लेने से पृष्ठ को लोड करने के लिए समय कैसे कम किया (वेब सर्वर पर) सीपीयू लाइन को देखने में सक्षम नहीं होने के कारण .. डेटा से मेमोरी ऑब्जेक्ट को डेटा से बदलकर हैश टेबल में बदलकर।

तो एक उदाहरण या मामला लें कि आप चीज को बेहतर ढंग से लागू किया गया है, और उस लड़ाई को जीतें। उच्च स्तर के युद्ध से लड़ें मत ...

1

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

5

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

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

+0

मैं आपके द्वारा उल्लेखित दोनों विकल्पों के लिए पेशेवरों और विपक्ष को देख सकता हूं, लेकिन मैं अन्य डेवलपर्स को डेटासेट मार्ग से दूर जाने के लिए प्राप्त करना चाहता था क्योंकि यह .NET मंच के साथ बहुत कसकर है। यदि हम उदाहरण के लिए जावा पर स्विच करते हैं, तो उन्हें शुद्ध ओओपी अवधारणाओं के बारे में अधिक समय बिताना पड़ सकता है –

+0

मैं आपको सुनता हूं - लोगों को चीजों को करने के नए तरीकों के बारे में सोचने में हमेशा मुश्किल होती है। मैं अपने तरीकों से पर्याप्त रूप से फंस गया हूं कि आपकी टिप्पणी पढ़ने के बाद मेरा पहला विचार था "मुझे आश्चर्य है कि जावा में डेटासेट्स और डेटाटेबल्स जैसी चीज़ें हैं"। – MusiGenesis

+0

मैंने एक बार एक सह-कार्यकर्ता को दूसरी दिशा (डेटा ऑब्जेक्ट्स को डेटा ऑब्जेक्ट्स) में जाने के लिए धोखा दिया, लेकिन कहानी निश्चित रूप से मुझे नीचे वोट देगी, और मुझे नहीं लगता कि यह चाल उलटा है। :) – MusiGenesis

0

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

काम किया।

2

यदि इंटरऑपरेबिलिटी लाइन के नीचे चिंता का विषय है, तो डेटासेट निश्चित रूप से जाने का सही दिशा नहीं है। आप किसी सेवा पर डेटासेट/डेटाटेबल्स का खुलासा कर सकते हैं लेकिन क्या आपको चाहिए या बहस योग्य है या नहीं। यदि आप बात कर रहे हैं .NET -> .NET आप शायद ठीक हैं, अन्यथा आपको अपनी सेवा

0

डेटा-केंद्रित का मतलब कम कोड-जटिलता का मतलब है, तो आपकी साइट का उपभोग करने वाले बाड़ के दूसरी तरफ से बहुत दुखी ग्राहक डेवलपर होने जा रहे हैं।

कस्टम ऑब्जेक्ट्स का मतलब है कि संभावित रूप से सैकड़ों अतिरिक्त वस्तुओं को संगठित, बनाए रखने और आम तौर पर रहने के लिए। यह थोड़ा तेज होने जा रहा है।

मुझे लगता है कि यह वास्तव में एक कोड-जटिलता बनाम प्रदर्शन प्रश्न है, जिसका उत्तर आपके ऐप की ज़रूरतों से किया जा सकता है।

0

छोटा प्रारंभ करें। क्या कोई उपयोगिता ऐप है जिसका उपयोग आप अपने बिंदु को स्पष्ट करने के लिए कर सकते हैं?

उदाहरण के लिए, एक जगह जहाँ मैं काम पर, मुख्य आवेदन एक जटिल निर्माण प्रक्रिया था, config फ़ाइल में बदलाव के लिए एक सेवा स्थापित करने, आदि

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

इसी प्रकार, कुछ छोटा खोजें जहां आप उन्हें दिखा सकते हैं कि एक गैर-डेटासेट ऐप एक प्रमुख विकास निवेश किए बिना कैसा दिखता है।

+0

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