2009-05-29 9 views
10

हम कुछ एएसपी.नेट एमवीसी विकास शुरू करने वाले हैं और वर्षों से अपने स्वयं के इकाई ढांचे का उपयोग कर रहे हैं। हालांकि हमें अपने इकाई ढांचे से अधिक समर्थन करने की आवश्यकता है और इसलिए मैं अधिक मजबूत ढांचे के साथ एमवीसी का उपयोग करने के बारे में कुछ राय प्राप्त करना चाहता हूं। हमने एनएचबीर्नेट (फ्लुएंट एपीआई के साथ) या LINQ से SQL तक संकुचित या विकल्प को कम किया है।एएसपी.नेट एमवीसी साइट के लिए कौन सा डाटा फ्रेमवर्क बेहतर है - LINQ से SQL या NHibernate

कौन सा ढांचा एमवीसी शैली के विकास के लिए खुद को सबसे अच्छा ऋण देता है (मुझे पता है कि SOQ LINQ से SQL का उपयोग करता है)?

अगर हम SQL सर्वर, ओरेकल, MySQL का समर्थन करना चाहते हैं - क्या यह LINQ से SQL को बाहर करता है? एसक्यूएल को

+1

एमवीसी टेम्पलेट्स के साथ सबसनिक 3 भी है। –

+0

एक IQueryable ऑब्जेक्ट को वापस नहीं कर रहा है लिंक-टू-एसक्यूएल को एक धाराप्रवाह एपीआई बनाता है? – Nick

उत्तर

4

मुझे एमवीसी के साथ फ्लुएंट एनएचबेर्नेट और निर्भरता इंजेक्शन (निनजेक्ट, मेरे मामले में) का उपयोग करके बड़ी सफलता मिली है।

मुझे ऐसा लगता है कि हालांकि किसी भी परिपक्व ORM MVC के साथ अच्छी तरह से काम करना चाहिए। MVC (मॉडल/देखें/नियंत्रक) की प्रकृति के बाद से तीन चिंताओं को अलग करती है, किसी भी ORM "मॉडल" भूमिका में काफी अच्छी तरह से फिट होना चाहिए।

+0

यही वह ढेर है जिसे मैं वर्तमान में झुका रहा हूं। जहां कोई गठिया है कि मुझे अवगत होना चाहिए? –

+0

कोई भी जो तुरंत दिमाग में आता है, या कम से कम अब हल नहीं किया जाता है। मैंने मूल रूप से एमवीसी नियंत्रकों को डी इंजेक्शन के लिए अपना खुद का मॉड्यूल लागू किया, लेकिन अब एक आधिकारिक निनजा कार्यान्वयन है: http://github.com/enkari/ninject.web.mvc/tree/master मुझे यकीन है कि अब एमवीसी है तेजी से लोकप्रियता तेजी से, अन्य डी ढांचे में समान मॉड्यूल होते हैं यदि आप निनजेक्ट के साथ नहीं जाते हैं। आपकी एनएच कॉन्फ़िगरेशन कितनी जटिल है, इस पर निर्भर करते हुए, आपके पास सत्र कारखानों को इंजेक्शन देने में कुछ अतिरिक्त काम हो सकता है लेकिन एफएनएच अपने डीएसएल इंटरफेस की प्रकृति से DI के साथ बहुत अच्छी तरह से खेलता है। –

+0

स्टुअर्ट - एएसपी.नेट एमवीसी विकास में किसी अन्य प्रकार का डेटा एक्सेस फ्रेमवर्क/तकनीक क्यों पसंद है? मैंने सोचा कि एएसपी.नेट एमवीसी इस्तेमाल किए गए डेटा एक्सेस के प्रकार के बारे में कोई धारणा नहीं रखता है (न ही कोई पूर्वाग्रह है)? चूंकि मॉडल में कहीं भी डेटा एक्सेस हो रहा है, इसलिए मैं पारंपरिक ADO.NET का उपयोग कर सकता हूं यदि मेरे पास ठोस डेटा एक्सेस कोड था जिसे मैं पहले से ही लिखा था और पुन: उपयोग करना चाहता था। – Matt

2

LINQ एसक्यूएल सर्वर के लिए है। इकाई फ्रेमवर्क कुछ अन्य डेटाबेस का भी समर्थन करता है।

NHibernate अच्छा विकल्प है। आप Castle ActiveRecord उपयोग कर सकते हैं (यह राष्ट्रीय राजमार्ग के शीर्ष पर बनाया गया है) यदि आप डेटा आधारित अनुप्रयोग या Sharp Architecture परियोजना मार्गदर्शन के लिए कर रहे हैं।

1

इकाई की रूपरेखा MVC के साथ अच्छी तरह से एकीकृत और अन्य डेटाबेस का समर्थन करता है।

1

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

ये ओआरएम चुनते समय जांच के लिए आवश्यक प्रश्न हैं - और वे अधिकतर स्वतंत्र हैं कि आप एमवीसी या विनफॉर्म का उपयोग कर रहे हैं या नहीं।

6

किसी ऐसे व्यक्ति के रूप में जिसने LINQ to SQL से (फ्लुएंट) एनएचबेर्नेट से स्विच किया है, यहां कुछ चीजें हैं जिन्हें मैंने देखा है।

  1. LINQ     को एसक्यूएल तो कैसे एक में शामिल होने-उपवर्ग के बराबर करने के लिए यह पता लगाने की समय लगा। कई संशोधनों के बाद, मैंने कहीं पढ़ा है कि यह संभव नहीं है। यदि सभी कॉलम उसी तालिका में हैं तो यह केवल विरासत को मानचित्रित कर सकता है। यदि कुछ कॉलम हैं तो यह बहुत अच्छा है, लेकिन मेरे मामले में बहुत सारे टन हैं और उप-वर्ग अन्य उप-वर्गों के माता-पिता हैं और इसी तरह। मुझे अपने ओआरएम के लिए उन्हें एक टेबल में क्यों रखा जाना चाहिए? अनुभव से

  2. NHibernate मजबूत (कभी कभी छोटे त्वरित परियोजनाओं के लिए बहुत ज्यादा) और यद्यपि छोटी परियोजनाओं के माध्यम से यह से परिचित हो गया है, मैं इसे बहुत ज्यादा हो सकता है महसूस किया और   एसक्यूएल को LINQ   के मार्ग से चला गया के बाद से मैं उत्पन्न कर सकता है एक DBML फ़ाइल और मिनटों के भीतर जा रहा है।

  3. फ्लुएंट एनएचबेर्नेट। दोनों दुनिया के सर्वश्रेष्ठ (मेरे मामले में) लेता है। मैं जिस तरीके से चाहता हूं उसे मैप कर सकता हूं और अपना डेटाबेस जिस तरह से चाहता हूं और मुझे अपने डोमेन या डेटा मॉडल में समझौता नहीं करना है। इसके अलावा एक शब्द: ऑटोमैपिंग ... केक पर टुकड़े टुकड़े करना।

मैं एक ORM के साथ जाने का पड़ता था एक बार मैं सीमाओं पाया और   एसक्यूएल को LINQ   के साथ कुछ सड़क धक्कों मारा, लेकिन धाराप्रवाह NHibernate इस चुनाव करना आसान हो गया है, और मुझे नहीं लगता कि मैं हूँ इसे तब तक छोड़ दें जब तक कि कुछ न हो जो नौकरी को और भी बेहतर करे।

तो, रॉब स्कॉट ने कहा, सवाल यह है कि आप डोमेन => डेटा मॉडल को कैसे सारणित कर रहे हैं? और क्या आप किसी डोमेन या डेटाबेस से शुरू कर रहे हैं? संबंध कितने जटिल हैं? यदि आपके पास कोई विरासत है तो मैं कहूंगा कि केवल एक अमीर ओआरएम ढांचे के साथ जाओ और खुद को दु: ख बचाएं।

फ्लुएंट एनएचबर्ननेट में मैंने कभी भी पाया है कि कुछ बेहतरीन दस्तावेज हैं और बहुत सारे समर्थन, नोट्स, ब्लॉग और संसाधन हैं जो कुछ भी कम करने से नफरत करते हैं ... आईएमओ! मैं 24 घंटों से भी कम समय में दौड़ रहा था।

ओह और यदि आप एनएचबर्ननेट के लिए नया हैं तो व्हील को ग्रीस बनाने में सहायता के लिए एक्शन बुक में एनएचबीर्नेट को उठाएं, हालांकि उस ढांचे के लिए भी बहुत मदद है।

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

आपको शुभकामनाएं .. लंबी प्रतिक्रिया के लिए खेद है; यह सब पिछले पांच या तो दिन में कर दिया गया है, इसलिए मुझे लगता है कि मैं अभी भी पकड़ा कर रहा हूँ :-)

+2

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

+0

5x1llz - एएसपी.नेट एमवीसी विकास में किसी अन्य प्रकार का डेटा एक्सेस फ्रेमवर्क/तकनीक क्यों पसंद है? मैंने सोचा कि एएसपी.नेट एमवीसी इस्तेमाल किए गए डेटा एक्सेस के प्रकार के बारे में कोई धारणा नहीं रखता है (न ही कोई पूर्वाग्रह है)? चूंकि मॉडल में कहीं भी डेटा एक्सेस हो रहा है, इसलिए मैं पारंपरिक ADO.NET का उपयोग कर सकता हूं यदि मेरे पास ठोस डेटा एक्सेस कोड था जिसे मैं पहले से ही लिखा था और पुन: उपयोग करना चाहता था। – Matt

+0

मैंने फ्लुएंट को वर्तमान में सबसे अच्छा उपलब्ध समाधान भी पाया है। :) @ मैट, एमवीसी वास्तव में कोई धारणा नहीं बनाता है, लेकिन फिर भी, एक ओआरएम दूसरे की तुलना में अधिक सुविधाजनक हो सकता है। – Venemo

0

Entity Framework बातें जटिल बना देता है। नियंत्रकों में रिपोजिटरी पैटर्न और inversion of control के साथ फ्लुएंट एनएचबेर्नेट का उपयोग करें।

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

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