2008-10-27 20 views
7

मैंने अभी LinqToSql का उपयोग करके अपनी डेटा-एक्सेस परत बनाना शुरू कर दिया है। हर कोई शांत वाक्यविन्यास के बारे में बात कर रहा है और मुझे वास्तव में लिंक सामान्य रूप से पसंद है।LinqToSql सर्वोत्तम अभ्यास

लेकिन जब मैंने देखा कि आपकी कक्षाएं कैसे उत्पन्न होती हैं तो यदि आप लिंककॉन्टेक्स्ट पर कुछ टेबल खींचते हैं तो मुझे आश्चर्य हुआ: इतना कोड जिसे किसी को भी आवश्यकता नहीं होगी ?!

तो मैंने देखा कि अन्य लोगों ने लिंककॉक्ल का उपयोग कैसे किया, उदाहरण के लिए रॉब कॉनरी अपने स्टोरफ्रंट डेमो में।

जैसा कि मुझे यह पसंद नहीं है कि यह सब कोड जेनरेट किया गया है, मैंने अपनी डोमेन परत हाथ से बनाई और उत्पन्न वर्गों को संदर्भ के रूप में उपयोग किया। उस समाधान के साथ मैं ठीक हूं, क्योंकि मैं लिंक द्वारा प्रदान की गई सुविधाओं का उपयोग कर सकता हूं (अपरिवर्तित निष्पादन, आलसी लोडिंग, ...) और मेरी डोमेन परत समझने में काफी आसान है।

आप LinqToSql का उपयोग कैसे कर रहे हैं?

उत्तर

6

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

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

मैंने खुद को कोने में कठिन तरीके से विकसित नहीं करना सीखा, यह शुरुआत में तेज़ और आसान लग रहा है, libs का उपयोग करने के तरीके सीखने से बहुत अधिक मजेदार है, लेकिन कुछ के बाद एक असली दर्द है सड़क के नीचे महीने, आमतौर पर मेरे लिए भी।

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

0

संकलित क्वेरी का उपयोग करें। एसक्यूएल से लिंक कुत्ते अन्यथा धीमा है। Really

+0

मुझे वास्तव में दिलचस्पी है कि यह क्यों कम हो गया है। हम उत्पादन में लिंक-टू-एसक्यूएल का उपयोग करते हैं और हमें संकलित लोगों के लिए अधिकांश प्रश्नों को फिर से लिखना पड़ा और हमें इसके बारे में 10x प्रदर्शन में वृद्धि हुई। – bh213

0

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

+0

मैंने इसे भी माना, लेकिन जेफ फ़्रिट्ज़ का उल्लेख किया गया मार्ग चला गया। कोई प्रतिबिंब की जरूरत नहीं है! – Vyrotek

4

LinqToSql अपने तालिकाओं के लिए आंशिक वर्गों का एक सेट उत्पन्न करता है। आप अपने आंशिक कक्षाओं के 'अन्य आधे' में इंटरफ़ेस परिभाषाएं जोड़ सकते हैं जो आपके डोमेन मॉडल को लागू करते हैं।

फिर, यदि आप लिंक क्वेरीज़ तक पहुंच को लपेटने के लिए रिपोजिटरी पैटर्न का उपयोग करते हैं, ताकि वे आपकी ऑब्जेक्ट्स (अंतर्निहित लिंक ऑब्जेक्ट्स) के इंटरफ़ेस कार्यान्वयन को वापस कर सकें, LinqToSql काफी लचीला हो जाता है।

+0

मैं इसे ठीक से पोस्ट करने जा रहा था। दूसरों को इस तरह इस्तेमाल करने के लिए अच्छा लगा। – Vyrotek

+0

मेरी टीम दृढ़ता से टाइप किए गए डेटासेट के साथ एक समान तकनीक का उपयोग करती है, आंशिक कक्षाओं में इंटरफ़ेस कार्यान्वयन जोड़ती है जो Vs.Net –

+0

उत्पन्न करती है क्या वे इसके बारे में कोई कोड उदाहरण हैं? मैंने मूल रूप से डीबी को नकल करने के लिए निर्भरता इंजेक्शन मॉडल का उपयोग करके अपना डोमेन लिखा है। अब मैं अपना LINQ SQL डेटाबेस में बना रहा हूं और कुछ लंगर रूपांतरण के बिना अपने linq ऑब्जेक्ट x के साथ अपने व्यावसायिक ऑब्जेक्ट एक्स को प्रभावी ढंग से मैप करने का तरीका जानने के लिए संघर्ष कर रहा हूं – qui

1

आप अपनी खुद की कक्षाओं हाथ से लिख सकते हैं और या तो LINQ एसक्यूएल के लिए मैपिंग या एक बाहरी एक्सएमएल फ़ाइल घोषित करने के लिए विशेषताओं का उपयोग।

यदि आप मौजूदा डिजाइनर के साथ रहना चाहते हैं और कोड जनरेशन प्रक्रिया को संशोधित करना चाहते हैं तो मेरा templates that let you tailor the generated code चुनें।

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