2008-12-15 7 views
17

मानते हैं कि लेखन निबर्ननेट मैपिंग फाइलें एक बड़ी समस्या नहीं है .... या गुणों के साथ अपने डोमेन ऑब्जेक्ट्स को प्रदूषित करना कोई बड़ा मुद्दा नहीं है ....कैसल सक्रिय रिकॉर्ड बनाम सीधे NHibernate का उपयोग करने के पेशेवरों और विपक्ष क्या है?

पेशेवर और विपक्ष क्या हैं?

क्या कोई मौलिक तकनीकी समस्या है? लोगों की पसंद को प्रभावित करने के लिए क्या होता है?

बिल्कुल सुनिश्चित नहीं है कि सभी ट्रेडऑफ क्या हैं।

उत्तर

21

एआर का सबसे बड़ा समर्थक यह है कि यह आपको एक तैयार भंडार देता है और आपके लिए सत्र प्रबंधन का ख्याल रखता है। ActiveRecordBase<T> और ActiveRecordMediator<T> का कोई भी उपहार एक उपहार है जिसे आप स्वयं एनएचबीर्नेट के तहत इकट्ठा कर लेते। एक्सएमएल मैपिंग से बचने का एक और प्लस है। एआर मैपिंग विशेषताओं का उपयोग करना आसान है, फिर भी काफी 'विरासत' डेटाबेस को मानचित्रित करने के लिए पर्याप्त लचीला है।

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

ध्यान रखें कि कैसल टीम ने एआर को कैसल मोनोरेल के लिए एक पूरक उत्पाद के रूप में लिखा है, जो .NET के लिए रेल की तरह ढांचा है। इसे इस तरह के उपयोग के साथ दिमाग में डिजाइन किया गया था। यह एक और स्तरित, decoupled डिजाइन के लिए अच्छी तरह से अनुकूल नहीं है।

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

0

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

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

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

संपादित करें: मैं या तो myGeneration या NHibernate के लिए एक चीयरलीडर की तरह लग जाने नहीं देना चाहते। मैं बस उस उपकरण का उपयोग करता हूं जो मुझे अपना काम जल्दी और आसानी से करने की अनुमति देता है। मुझे डेटा एक्सेस कोड लिखने में कम समय लगता है, बेहतर। इसका मतलब यह नहीं है कि मैं ऐसा नहीं कर सकता - लेकिन हर बार जब आप एक नया आवेदन लिखते हैं तो पहिया को पुन: आविष्कार करने में थोड़ा सा अर्थ नहीं होता है। एसक्यूएल प्रश्नों और संग्रहीत प्रक्रियाओं को लिखें जहां आवश्यक हो, और कहीं और नहीं। यदि आप सीआरयूडी परिचालन कर रहे हैं, तो ओआरएम जाने का रास्ता है।

संपादित करें # 2: कैसल सक्रिय रिकॉर्ड तालिका से अधिक ला सकता है मुझे लगता है - मुझे अन्य than what's on their website नहीं पता है, लेकिन यदि यह तालिका में और अधिक लाता है, तो यह संभावित गोद लेने में सक्षम होने में मदद करेगा आसानी से उनकी साइट पर देखने के लिए।

15

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

मेरी राय समर्थक की और विपक्ष में हैं:

पेशेवरों

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

विपक्ष की खामियों

  • आप NHibernate का नाटक नहीं कर सकते हैं वहाँ नहीं है को देखने के लिए चाहते हो सकता है।
  • यदि आपके पास पहले से ही काम करने के लिए विरासत डेटाबेस है तो इतना उत्पादक नहीं हो सकता है।
  • पारदर्शी दृढ़ता नहीं।
  • में निर्मित मैपिंग व्यापक हैं, लेकिन कुछ परियोजनाओं के लिए आप स्थानों में NHibernate मैपिंग पर वापस लौटने की जरूरत हो सकती है। मुझे यह समस्या नहीं है, लेकिन सिर्फ एक विचार है।

सामान्य में, वास्तव में ActiveRecord जैसे मैं और यह हमेशा समय की बचत होती हो गया है, जिसका मुख्य कारण मैं खुशी से फैसलों और उपकरण पुस्तकालय में शामिल किया हुआ स्वीकार करते हैं, और बाद में अधिक समय बिताने हाथ में समस्या पर ध्यान केंद्रित करने लगते हैं ।

मैं इसे कुछ परियोजनाओं पर आज़मा दूंगा और देख सकता हूं कि आप क्या सोचते हैं।

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