2010-02-09 11 views
8

तो मुझे दीवार के पल के खिलाफ सिर है और उम्मीद है कि कोई भी मदद कर सकता है या तो दीवार को हटा सकता है या मेरे सिर को आगे बढ़ने से रोक सकता है !!ओआरएम के बारे में इतना अच्छा क्या है?

पिछले 3/4 सप्ताह में मैं एक नई परियोजना के लिए ओआरएम की तैयारी में जांच कर रहा हूं। ओआरएम को मौजूदा, बड़े और बुजुर्ग एसक्यूएल डेटाबेस में मैप करना होगा।

तो मैंने सबसनिक की कोशिश की। वीबी के साथ अच्छी तरह से काम करने के लिए मॉडलिंग के बाद मुझे वास्तव में v2 और v3 पसंद आया और एसक्यूएल में नामित स्कीमा ठीक चल रहा था। हालांकि, अलग-अलग इकाई गुणों के नाम बनाम कॉलम नाम रखने की लचीलापन की कमी ने मुझे अपने बालों को खींच लिया (माफ करना रोब)।

मैंने एंटिटी फ्रेमवर्क की कोशिश की लेकिन मुझे कुछ क्षेत्रों में कमी की तरह दूसरों की तरह मिला।

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

मैं अनिवार्य रूप से एक डीएएल कक्षा बनाने के बाद हूं जिसे मैं ऐप्स और वेबसाइटों के बीच साझा कर सकता हूं। क्या मैं गलत पेड़ को भड़क रहा हूँ? 100 के टेबल के साथ एक विरासत परियोजना के लिए मैं ado.net पर वापस जाना चाहिए और डीटीओ का उपयोग करना चाहिए? Aarrgh!

प्रश्न की रैंटी शैली के लिए खेद है। मेरे पास ज्यादा बाल नहीं हैं और मैं जो रखना चाहता हूं उसे रखना चाहता हूं !!

अग्रिम धन्यवाद, एड

पीएस। मुझे यह जोड़ना चाहिए कि मैं एसक्यूएल को बहुत अच्छी तरह से जानता हूं और तेज़ प्रश्न लिखने के लिए अपने हाथ गंदे होने से डरता नहीं हूं। अगर मुझे कुछ भी एसक्यूएल

+2

एप्लिकेशन आप किस तरह ताकि nhibernate स्टार्टअप समय एक मुद्दा है क्या ज़रूरत है? आईएमओ, यह केवल आपको परेशान करना चाहिए यदि आप सीधे मध्यस्थता सेवा के मामले में डेस्कटॉप से ​​डीबी तक पहुंचते हैं। –

+0

@ डिमिट्री: आप सही हैं +1 –

+1

आप केवल यह पूछकर सरलता से इस रान को सरल बना सकते हैं "मैं एनएचबीरनेट एप्लिकेशन के स्टार्टअप समय को कैसे बढ़ा सकता हूं?"। –

उत्तर

8

ORM आइए आप:

  1. वस्तुओं के लिए तालिका पंक्तियों, उस वस्तु उन्मुख प्रोग्रामिंग की व्यावहारिक टुकड़े हैं नक़्शा बनाने के लिए।
  2. स्वचालित रूप से वस्तु संबंधों के माध्यम से नेविगेट
  3. आसानी से जोड़ने के लिए, संपादित करें और तालिका पंक्तियों को हटाने के लिए
  4. एक अधिक सहज तरीके से डेटाबेस क्वेरी करने के लिए आप जुड़ जाता है के बारे में सोच की जरूरत नहीं है के रूप में (यह एक पर निर्भर करेगा ओआरएम और क्वेरी विधि)
  5. पारदर्शी रूप से एल 1 और एल 2 कैश को संभालने के लिए।

यदि आप ओआरएम का उपयोग कर रहे हैं तो उपर्युक्त सभी को हाथ से संभालना होगा।

पीएस: मैं एनएचबेर्नेट के स्टार्टअप समय के रूप में दिमित्री से सहमत हूं (प्रश्न टिप्पणियां देखें)। इसके अलावा, क्या आपने Fluent NHibernate को आजमाया? Fluent NHibernate प्रभावशाली रूप से आसान है। जब मैंने पहली बार डेटाबेस मैप किया था तो मैं अपनी आंखों पर विश्वास नहीं कर सका। यह DevExpress XPO जैसे मालिकाना ओआरएम से भी आसान है।

+1

+1 के साथ नहीं मिलता है। वर्तमान में इसे एक परियोजना पर उपयोग कर रहा है और यह वास्तव में "प्रभावशाली आसान" है। Decoupling पर जोर देने के लिए –

1

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

एक समाधान मैं LINQ2SQL के बारे में उत्साहित हूं। यह संग्रहित प्रक्रियाओं या विचारों के बारे में एक पतली परत के रूप में उत्कृष्टता प्राप्त करता है। यह उपयोग करना वास्तव में आसान है और एसक्यूएल को छिपाने की कोशिश नहीं करता है।

+0

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

+0

एंडोमर: सामान्य रूप से ओआरएम, वस्तुओं को उजागर कर रहे हैं, एसक्यूएल नहीं। पूरी बात यह है। ऑब्जेक्ट्स पर रिलेशनल टेबल मैप न करने के लिए आप ओआरएम का उपयोग क्यों कर रहे हैं? शायद ADO.NET आपकी आवश्यकताओं के लिए अधिक उपयुक्त है। –

+0

एंडोमर: क्या आपने @ PLINQO देखा है? मैंने उसी डेटाबेस और कोडेस्मिथ के साथ मैप किया और कम त्रुटियों और बहुत तेज निष्पादन समय के साथ समाप्त हुआ - बॉक्स से कोई स्टार्टअप देरी नहीं हुई। – CResults

2

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

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

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

+0

+1। यह अकेला कारण है कि मैं दृढ़ता से ओआरएम उपकरण का समर्थन करता हूं और भंडार पैटर्न का उपयोग करता हूं। –

+3

ओआरएम उपकरण decoupling के साथ मदद नहीं करते हैं। प्रेजेंटेशन लॉजिक अभी भी डेटाबेस से बात करने के लिए ओआरएम तंत्र के माध्यम से ADO.NET या SQL का उपयोग कर सकता है। LinqToSql आपकी व्यावसायिक परत बनना चाहता है और वास्तव में व्यापार और डेटा तर्क को अलग करना मुश्किल बनाता है। ज्यादातर मामलों में ओआरएम बहुत बुनियादी सीआरयूडी के अलावा किसी भी एसक्यूएल को छिपा नहीं सकता है और नाम/आईडी प्रकार के प्रश्नों से लुकअप नहीं कर सकता है। ओआरएम विरासत परियोजनाओं के लिए उपयोगी हो सकता है और हमेशा नई परियोजनाओं के लिए समझ में नहीं आता है। –

+0

ओआरएम टूल्स * डू * डिकूप्लिंग के साथ मदद करें। जैसा कि मैंने लिखा है, यह केवल एकमात्र चीज नहीं है जिसे आपको करने की ज़रूरत है, क्योंकि आपको अभी भी इंटरफ़ेस विधियों को परिभाषित करने की आवश्यकता है, जो ओआरएम पुस्तकालयों पर निर्भरता छुपाएंगे। हालांकि ये विधियां 'ग्राहक' या 'ऑर्डर' जैसी कक्षाओं का उपयोग कर सकती हैं जिन्हें ORM टूल के साथ बनाया गया है और डेटाबेस में मैप किया गया है। – kgiannakakis

1

मूल रूप से यहां दो प्रश्न हैं:

ORMs के बारे में क्या बढ़िया है? Stackoverflow पर समान प्रश्न हैं। देखें:

मैं NHibernate स्टार्टअप अवधि कैसे सुधार कर सकते हैं? देखें:

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