मैं ORM का मूल्यांकन कर रहा हूं।
मैंने SubSonic , Linq-to-SQL और Entity फ्रेमवर्क का उपयोग किया है । मुझे जूनियर्स से लेकर सीनियर्स तक के डेवलपर्स की एक टीम मिली है।
ORM FOR.NET के मूल्यांकन के लिए क्या मापदंड हैं?
मैं ORM का मूल्यांकन कर रहा हूं।
मैंने SubSonic , Linq-to-SQL और Entity फ्रेमवर्क का उपयोग किया है । मुझे जूनियर्स से लेकर सीनियर्स तक के डेवलपर्स की एक टीम मिली है।
ORM FOR.NET के मूल्यांकन के लिए क्या मापदंड हैं?
जवाबों:
यह एक लोडेड सवाल है।
विभिन्न दर्शन के साथ इस विषय पर बहुत अच्छे ओआरएम आते हैं।
जैसे ही आप अपने सुनहरे रास्ते से भटकते हैं (और कभी-कभी जब आप उससे चिपके रहते हैं) तो कोई भी इसके माध्यम से परिपूर्ण नहीं होता है।
ORM का चयन करते समय आपको खुद से क्या पूछना चाहिए:
इसके लिए आपको क्या करने की आवश्यकता है?
यदि आपके पास पहले से ही अपने आवेदन के लिए आवश्यकताओं का एक सेट है, तो आपको ORM का चयन करना चाहिए जो एक काल्पनिक 'सर्वश्रेष्ठ' के बजाय इनसे बेहतर मेल खाता हो।
क्या आपका डेटा साझा किया गया है या सिर्फ स्थानीय है?
ओआरएम में बहुत सारे बालों के झड़ने का कारण होता है कि वे कैसे संगामिति को संभालते हैं और डेटाबेस में डेटा में बदलाव करते हैं जब कई उपयोगकर्ता एक ही डेटा के संस्करणों को पकड़ रहे हैं।
यदि आपका डेटास्टोर एकल-उपयोगकर्ता के लिए है, तो अधिकांश ORM अच्छा काम करेंगे। हालांकि, अपने आप से एक बहु-उपयोगकर्ता परिदृश्य में कुछ कठिन प्रश्न पूछें: ताला कैसे लगाया जाता है? जब मैं किसी ऑब्जेक्ट को हटाता हूं तो क्या होता है? यह अन्य संबंधित वस्तुओं को कैसे प्रभावित करता है? क्या ओआरएम बैकएंड की धातु के करीब काम कर रहा है या क्या यह बहुत अधिक डेटा कैशिंग कर रहा है (स्टैल्सी के जोखिम को बढ़ाने की कीमत पर प्रदर्शन में सुधार)।
क्या ORM अच्छी तरह से आपके आवेदन के लिए अनुकूलित है? यदि किसी सेवा में उपयोग किया जाता है या किसी वेब ऐप के अंदर बैठकर किसी विशेष ORM के साथ काम करना मुश्किल हो सकता है (बहुत सारे प्रदर्शन ओवरहेड, कोड के लिए कठिन)। यह इसके विपरीत डेस्कटॉप ऐप्स के लिए बढ़िया हो सकता है।
क्या आपको डेटाबेस-विशिष्ट संवर्द्धन छोड़ना होगा?
ORMs SQL के निम्नतम-सामान्य भाजक सेट का उपयोग यह सुनिश्चित करने के लिए करते हैं कि वे विभिन्न डेटाबेस बैकएंड के बहुत से काम करते हैं।
सभी ओआरएम उपलब्ध सुविधाओं पर समझौता करेंगे (जब तक कि वे विशेष रूप से एकल बैकएंड को लक्षित न करें) लेकिन कुछ आपको अपने चुने हुए बैकएंड में उपलब्ध विशिष्ट वृद्धि का फायदा उठाने के लिए अतिरिक्त व्यवहार को लागू करने की अनुमति देंगे।
एक विशिष्ट डीबी-विशिष्ट वृद्धि उदाहरण के लिए पूर्ण-पाठ खोज क्षमताओं है; सुनिश्चित करें कि आपका ओआरएम आपको इन सुविधाओं तक पहुंचने का एक तरीका प्रदान करता है यदि आपको उनकी आवश्यकता है।
ORM डेटा मॉडल में बदलाव कैसे करता है?
कुछ एक निश्चित उपाय के भीतर DB को स्वचालित रूप से अपडेट कर सकते हैं, अन्य कुछ भी नहीं करते हैं और आपको खुद ही गंदा काम करना होगा; अन्य परिवर्तन से निपटने के लिए एक रूपरेखा प्रदान करते हैं जो आपको डेटाबेस अपडेट को नियंत्रित करने देता है।
ओआरएम की वस्तुओं के लिए अपने आवेदन को युगल करने के लिए आपका मन करता है या क्या आप पीओसीओ और उपयोगकर्ता को दृढ़ता के लिए एडेप्टर को संभालना पसंद करते हैं?
पूर्व आमतौर पर संभाल करने के लिए सरल है, लेकिन आपके ORM- विशिष्ट डेटा ऑब्जेक्ट्स पर हर जगह निर्भरता पैदा करते हैं, बाद वाला थोड़ा अधिक कोड की कीमत पर अधिक लचीला होता है।
क्या आपको कभी भी अपनी वस्तुओं को दूर से स्थानांतरित करने की आवश्यकता होगी?
दूरस्थ सर्वर से वस्तुओं को लाने के लिए सभी ORM समान नहीं होते हैं, जो संभव है या जो करना असंभव है उसे करीब से देखें। कुछ कुशल हैं, अन्य नहीं।
क्या कोई है जिसे आप मदद के लिए बदल सकते हैं?
क्या अच्छा व्यावसायिक समर्थन है? परियोजना के आसपास समुदाय कितना बड़ा और सक्रिय है?
मौजूदा उपयोगकर्ता उत्पाद के साथ क्या समस्याएँ हैं?
क्या उन्हें जल्दी समाधान मिलता है?
कुछ ORM जिन्हें मैंने देखा:
बेशक कई अन्य हैं।
आप विवादास्पद साइट ORM बैटल पर एक नज़र डाल सकते हैं जो कुछ प्रदर्शन बेंचमार्क को सूचीबद्ध करता है, हालांकि आपको यह जानना होगा कि कच्ची गति आपके प्रोजेक्ट के लिए सबसे महत्वपूर्ण कारक नहीं है और वेबसाइट के निर्माता DataObject.Net हैं।
मैं NHibernate का उपयोग कर रहा हूँ और इसे बहुत अच्छा पाया है।
मेरे मामले में, एक MS Sql डेटाबेस से जुड़ा हुआ है, लेकिन आप अन्य डेटाबेस से कनेक्ट कर सकते हैं।
इसे उठने और चलने में लंबा समय नहीं लगता है - बस अपने ऑब्जेक्ट को मॉडल पर मैप करें - मैं एक xml फ़ाइल का उपयोग करता हूं लेकिन आप इसे धाराप्रवाह कोड में कर सकते हैं। एक महान समुदाय है, और व्यक्तिगत रूप से मैंने आयेंडे के काम को बहुत मददगार पाया है - मैं NHProf का उपयोग करता हूं जो कि एक sql प्रोफाइल टूल है।
मैं ज्यादातर आउट ऑफ द बॉक्स फंक्शन - स्ट्रेट ऑब्जेक्ट मैपिंग का उपयोग करता हूं, लेकिन मैंने हाइबरनेट क्वेरी लैंग्वेज का भी उपयोग किया है, जिसे पकड़ना काफी आसान है।
अफसोस की बात है कि मेरी पिछली तीन नौकरियों में, हमारे पास तीन घर-घर ओआरएम थे। प्रत्येक मामले में, वे ज्यादातर अलग-अलग कारणों से चूसते थे।
मैं हाल ही में एंटिटी फ्रेमवर्क 4 का मूल्यांकन कर रहा हूं और इसका पोको सपोर्ट (एक अच्छा वॉकथ्रू यहां है ) और मैं वास्तव में इस बात से प्रभावित हूं कि यह मेरे चेहरे से कितना बाहर रहता है और मुझे ऐसा महसूस कराता है कि मैं डेटा की बजाए फिर से प्रोग्रामिंग कर रहा हूं।
मुझे लिन्क बहुत पसंद है। यह सरल है और एक सभ्य डिजाइनर है। हालाँकि, मुझे उम्मीद है कि यह एंटिटी फ्रेमवर्क के पक्ष में है। मैं जनरेटर को संशोधित करने की क्षमता का लाभ उठाने में सक्षम होना चाहता हूं ताकि मेरे पास अनुकूलित वस्तुएं हो सकें।
दूसरों पर (मेरी राय में) सबसे बड़ा लाभ यह है कि वे वी.एस. के साथ बॉक्स से बाहर हैं। यह भी एक नकारात्मक है कि आप एमएस की दया पर हैं (देखें लिनक से सकाल)।
[अस्वीकरण: मैं DevExpress के लिए काम करता हूं]
आप यहां DevExpress एप्लीकेशन फ्रेमवर्क द्वारा बनाए गए विशिष्ट एप्लिकेशन के स्क्रीनशॉट देख सकते हैं । इस पृष्ठ में हमारे उत्पादों की बहुत संक्षिप्त समीक्षा भी शामिल है। क्यों , इस बारे में अधिक विस्तृत जानकारी के लिए , मेरा सुझाव है कि आप हमारी वेब साइट पर संबंधित उत्पाद पृष्ठ देखें।
DevExpress XAF और XPO के रूप में, यहाँ क्यों हमारे आवेदन चौखटे चुनने के लिए पर एक अच्छी व्याख्या है। साथ ही, हम समर्थन और प्रलेखन प्रदान करते हैं, जो महत्वपूर्ण और उल्लेख के लायक भी है। किसी भी प्रश्न के मामले में हमसे संपर्क करने के लिए स्वतंत्र महसूस करें।
हम छोटे प्रोजेक्ट्स पर Linq-to-Sql के साथ NHibernate + Fluent NHibernate का उपयोग करते हैं। इसका कारण यह है:
1) (प्राथमिक कारण नहीं) NHibernate लगता है कि डेवलपर्स के बीच एक उच्च "सम्मान" कारक है (यह है)?)?
2) linq-to-SQL की तुलना में, nHibernate ORM मैपिंग को Db ऑब्जेक्ट्स और संस्थाओं के बीच की अनुमति देता है जो 1-टू -1 मैप नहीं करते हैं
3) हमने एनहाइबनेट की तुलना एंटिटी फ्रेमवर्क 4.0 से नहीं की है, लेकिन यहां एक अच्छी तुलना की है: http://ayende.com/blog/archive/2010/01/05/nhibernate-vs.-entity-framework-4.0.aspx
nHibernate के पास कुछ सीखने की अवस्था है और इसके XML नक्शे काफी क्रियात्मक हो सकते हैं, लेकिन धाराप्रवाह Nhibernate साइट प्रलेखन के साथ शुरू करें और अपने तरीके से पीछे की ओर काम करें।
वहाँ एक "सबसे अच्छा" ORM ढांचा नहीं है क्योंकि उन सभी में ताकत और कमजोरियों के अलग-अलग संयोजन हैं और यह इस मामले में है कि अगर डेवलपर्स एक क्षेत्र को बेहतर बनाने पर ध्यान केंद्रित करना चुनते हैं तो अन्य क्षेत्र हैं जो तुलना में पीड़ित हैं (कोड पहले बनाम। मॉडल पहले बनाम डेटाबेस पहले)।
दूसरी ओर, बहुत से अच्छे लोग हैं, जिनमें से कुछ आपकी व्यक्तिगत परिस्थितियों और दूसरों की तुलना में दर्शन के लिए बेहतर मेल होंगे ।
संपादित करें: इसके लायक क्या है, मैं वर्तमान में एसक्यूएल के लिए लाइनक का उपयोग कर रहा हूं - ज्यादातर क्योंकि इसके आंशिक रूप से, क्योंकि यह न्यूनतम प्रयास के लिए बहुत कुछ सही करता है और शायद फिर से एंटिटी फ्रेमवर्क के लिए प्रगति करेगा "क्योंकि इसके वहां" (हालांकि इसी तरह से भी है EF4 के बारे में बहुत कुछ सही है और साथ ही कुछ सामान जो गलत है)। चिंता, विशेष रूप से उत्तरार्द्ध के साथ, प्रदर्शन के लिए होगा, लेकिन मेरे अधिकांश मामलों के लिए यह एक बहुत बड़ा मुद्दा नहीं है और मॉडल (L2S और EF) से डायनामिक डेटा और OData को चलाने की क्षमता मेरे लिए काफी लाभकारी है " सस्ता "जीतता है।
मैं आपको DevExpress XPO पर एक नज़र डालने की सलाह दूंगा । DevExpress XAF के साथ यह किसी भी डेवलपर के जीवन को आसान बना देगा, जब उसका सीखने की अवस्था पार हो जाएगी।
हमारे पास एंटिटी फ्रेमवर्क के साथ अच्छी किस्मत है। हमारी स्थिति कुछ असामान्य है, हालांकि - हम रिपोर्टिंग टीम के लिए डेटा संग्रह करते हैं, इसलिए वे वास्तव में डेटाबेस को डिज़ाइन करते हैं। हम डीबी प्राप्त करते हैं और फिर उसमें से डेटा एक्सेस कक्षाओं को उत्पन्न करने के लिए बस ईएफ का उपयोग करते हैं। हमारे लिए बहुत अच्छा काम करता है, लेकिन हम सिर्फ बल्क डेटा लोड करते हैं, इसलिए मैं इस बात की प्रतिज्ञा नहीं कर सकता कि यह अधिक लेन-देन वाले वातावरण में कितना अच्छा है।
NHibernate (+ FluentNHibernate) मेरे लिए डिफ़ॉल्ट विकल्प होगा। यह बहुत लचीला, एक्सटेंसिबल और मजबूत है। इसे उपयोगकर्ताओं की एक बड़ी मात्रा मिली है और इसे बहुत सक्रिय रूप से बनाए रखा गया है। नकारात्मक पक्ष खड़ी सीखने की अवस्था है।
माइंडस्केप का लाइटस्पीड सरल और उपयोगकर्ता के अनुकूल है, लेकिन फिर भी काफी लचीला और सक्षम है। इसमें L2S / EF जैसी डिज़ाइनर सतह और एक UnitOfWork कार्यान्वयन है।
खैर, कोई "सर्वश्रेष्ठ" विकल्प नहीं है, लेकिन मैं कहूंगा कि एसक्यूएल के लिए नियमित रूप से पुराने लाइनक आपकी आवश्यकताओं को पूरा करता है। यह एक "सच" ORM प्रति se नहीं है, लेकिन यह बहुत हल्का है और आपको इसके बारे में पता किए बिना कोड लिखने की सुविधा देता है, अगर यह समझ में आता है। मेरे कहने का मतलब यह है कि आप dbml
फाइल के रूप में लाइनक के बारे में वास्तव में जागरूक होने के बिना, सामान्य रूप से कोड लिखना जारी रख सकते हैं । आप अभी भी इस पर सार लिख सकते हैं, रिपॉजिटरी या गेटवे पैटर्न का उपयोग कर सकते हैं, और एल 2 एस एक ओआरएम की मुख्य भूमिका को पूरा करता है, जिसे ऑब्जेक्ट-रिलेशनल मिसमैच के आसपास प्राप्त करना है।
एंटिटी फ्रेमवर्क थोड़ा भारी है, और जब तक मैं केवल इसे थोड़ा "थोड़ा-बहुत" अपने चेहरे पर "मूल लिनक से सक्ल की तुलना में" के साथ दबोच लिया है, लेकिन EF Linq की तुलना में एक सच्चे ORM के बहुत अधिक है। मैं उन सभी मानदंडों को देखूंगा जिन्हें आप ORM में देख रहे हैं। क्या यह सिर्फ इसलिए है क्योंकि आप कच्ची एसक्यूएल लिखने से बचना चाहते हैं, या इससे भी बदतर, सैकड़ों संग्रहीत प्रक्रियाएं हैं। क्या आपको कुछ अतिरिक्त विशेषताओं की आवश्यकता है जो कच्चे Linq से Sql को प्रदान नहीं कर सकते हैं? आपको उन सवालों के जवाब देने की जरूरत है, लेकिन आपकी संक्षिप्त आवश्यकता ("हल्का और उपयोग करने में आसान") के आधार पर मुझे लगता है कि लिंकन सबसोनिक की तरह कुछ आसान है, और विजुअल स्टूडियो के लिए अंतर्निहित है।