2008-09-19 17 views
28

मेरे डेवलपर गृहयुद्ध की मजदूरी कर रहे हैं। एक शिविर में, उन्होंने हाइबरनेट और वसंत को गले लगा लिया है। दूसरे शिविर में, उन्होंने ढांचे की निंदा की है - वे हालांकि हाइबरनेट पर विचार कर रहे हैं।जावा फ्रेमवर्क युद्ध: वसंत और हाइबरनेट

सवाल यह है: क्या कोई बुरा आश्चर्य, कमजोरियों या गड्ढे गिरने वाले हैं कि नवजात हाइबरनेट-स्प्रिंग कनवर्ट्स पर ठोकर लगने की संभावना है?


पीएस: हमारे पास एक डीएओ लाइब्रेरी है जो बहुत परिष्कृत नहीं है। मुझे संदेह है कि इसमें हाइबरनेट की समृद्धि है, लेकिन यह किसी प्रकार की परिपक्वता तक पहुंच रही है (यानी यह आखिरी कुछ परियोजनाओं में शामिल नहीं है)।

+2

ओह मैन, जब मैं युद्ध में गिरावट करता हूं तो मुझे इससे नफरत है। बहुत अधिक उत्साह के साथ टीमों के लिए अक्सर होता है। –

उत्तर

28

मैंने अतीत में कई बार हाइबरनेट का उपयोग किया है। प्रत्येक बार जब मैं किनारे के मामलों में भाग लेता हूं जहां दस्तावेज, Google और पुराने संस्करणों के माध्यम से एक जादूगर शिकार में समर्पित वाक्यविन्यास का निर्धारण किया जाता है। यह एक शक्तिशाली उपकरण है लेकिन खराब दस्तावेज (आखिरी मैंने देखा)।

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

अपना खुद का ढांचा लिखना मोहक, शैक्षणिक और मजेदार है। परिणामों पर इतना अच्छा नहीं है।

+2

सावधान रहें। हाइबरनेट बेहद शक्तिशाली है, लेकिन यह भी जटिल है। आपको हाइबरनेट की जटिलता की आवश्यकता नहीं हो सकती है, एसक्यूएल मैप्स आदि जैसे ओआरएम के लिए अन्य विकल्प हैं। इन्हें वसंत में प्लग किया जा सकता है। विवरण के लिए http://static.springframework.org/spring/docs/2.5.x/reference/orm.html देखें। – MetroidFan2002

+1

वसंत और ओसीएम ढांचे में एक्सएमएल फाइलों में बहुत जटिलता और प्रोग्रामिंग शामिल है। ऐसे अन्य ढांचे हैं जिन्हें आप स्वयं लिखने के बिना वेब अनुप्रयोगों के निर्माण के लिए चुन सकते हैं। घटक प्रबंधन के साथ ओएसजीआई कंटेनर (उदाहरण के लिए अपाचे फ़ेलिक्स http://felix.apache.org) स्लिंग की हार्ड वायर्ड शैली और अपाचे स्लिंग (http://sling.apache.org) जैसे ढांचे से अधिक सरल और अधिक लचीला है नियंत्रकों और अतिरिक्त डीएओ परतों को पूरी तरह से लिखने की आवश्यकता। –

39

उन्होंने ढांचे निंदा की है?

यह पागल है। यदि आप ऑफ-द-शेल्फ फ्रेमवर्क का उपयोग नहीं करते हैं, तो आप अपना खुद का बनाते हैं। यह अभी भी एक ढांचा है।

+2

मुझे लगता है कि मैं अतिरंजित हूं। शायद निंदा नहीं करें ... बल्कि, वे अपनी परियोजनाओं में ढांचे को अपनाने के विचार से प्रतिरोधी रहे हैं। – magius

5

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

टीम ने गुइस के पक्ष में वसंत से छुटकारा पा लिया, लेकिन यह मेरे दृष्टिकोण और अन्य डेवलपर्स से कम से कम एक राजनीतिक परिवर्तन की तरह था।

0

फ्रेमवर्क बुरा नहीं हैं। यहां तक ​​कि जावा एसडीके एक ढांचा है।

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

यदि आप कोड के साथ संघर्ष करते हैं जो असंगत डेटाबेस उपयोग, जटिल कैश तंत्र, या अन्य कारणों से असंख्य कारणों से डीबग करना मुश्किल है। हाइबरनेट बहुत अच्छा मूल्य जोड़ देगा। सीखने की अवस्था के अलावा (जो मेरे लिए व्यावहारिक काम के लगभग 1 महीने का समय लेता है) कोई नुकसान नहीं हुआ, बशर्ते आपके पास किसी के लिए मूल बातें समझाने के लिए कोई है।

16

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

कुछ टिप्स:

  • हाइबरनेट एक अच्छा डेटाबेस डिजाइन का कोई विकल्प नहीं है। हाइबरनेट स्कीमा ठीक हैं लेकिन आपको उन्हें कभी-कभी
  • को ट्विक करना होगा, अंत में आपको यह समझना होगा कि कैसे हाइबरनेट आलसी कक्षाओं को लोड करता है और यह चीजों को कैसे प्रभावित करता है। हाइबरनेट जावा बाइटकोड को संशोधित करता है और आपको केवल बाद में या बाद में गहराई में पहुंचने की आवश्यकता होगी अगर केवल यह बताने के लिए कि वस्तु लिंक क्यों शून्य हैं।
  • यदि आप कर सकते हैं तो एनोटेशन का उपयोग करें।
  • हाइबरनेट प्रदर्शन ट्यूनिंग तकनीकों को जानने के लिए समय निकालें, यह आपको लंबे समय तक बचाएगा।
+0

वसंत पर कोई राय? – magius

+0

"हाइबरनेट प्रदर्शन ट्यूनिंग तकनीक" क्या आपके पास कोई संसाधन है? –

+0

बस "हाइबरनेट प्रदर्शन ट्यूनिंग तकनीक" googled जो कुछ हिट लौटा दिया। लेकिन हाँ, ब्लेड ने क्या कहा, क्या आपके पास कोई संसाधन है? – magius

3

मैंने बहुत सारे वसंत/हाइबरनेट विकास किए हैं। समय के साथ-साथ जिस तरह से संयोजन में दोनों लोग इस्तेमाल करते थे, वे थोड़ा सा बदल गए हैं। मूल HibernateTemplate दृष्टिकोण को डीबग करना मुश्किल साबित हुआ है क्योंकि यह अन्यथा उपयोगी अपवादों को निगलता है और लपेटता है; सीधे Hiberante एपीआई से बात करो!

कृपया जेनरेट किए गए SQL को देखें (SQL को दिखाने के लिए अपने विकास लॉगिंग को कॉन्फ़िगर करें)। डेटाबेस में एक अमूर्त परत होने का मतलब यह नहीं है कि आपको अब एसक्यूएल में सोचना नहीं है; यदि आप अन्यथा अच्छा प्रदर्शन नहीं करेंगे।

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

0

@ स्लिम - मैं आज सुबह तुम्हारे साथ हूं।

यह के क्लासिक केस की तरह लगता है यहां सिंड्रोम नहीं बताया गया है। यदि वे वसंत पर उत्सुक नहीं हैं, तो उन्हें अपने स्वयं के ढांचे को घुमाने के बजाय अन्य विकल्पों पर विचार करना चाहिए (चाहे वे इसे स्वीकार करते हैं या नहीं)। Guice एक संभावना के रूप में दिमाग में आता है। इसके अलावा picocontainer। आपको जो कुछ चाहिए, उसके आधार पर वहां अन्य लोग हैं।

7

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

वसंत एक अच्छा उपकरण है यदि आप जानते हैं कि इसका उपयोग कैसे किया जाए।

मैं कहूंगा कि ढांचे निश्चित रूप से एक अच्छी बात है - जैसे कि दूसरों ने इंगित किया है, आप पहिया को फिर से शुरू नहीं करना चाहते हैं। वसंत में बहुत सारे मॉड्यूल होते हैं जिसका अर्थ यह होगा कि आपको इतना कोड लिखना नहीं होगा। सिंड्रोम "यहां खोजा नहीं गया" पर झुकाओ मत!

2

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

वसंत के लिए के रूप में ... The Bile Blog देखना :)

याद रखें: व्यवस्थाएं नहीं silver bullets हैं, लेकिन आप या तो नहीं reinvent the wheel चाहिए।

7

यह एक बात है (मुझे याद है) कि जब मैं अपने हाइबरनेट दिनों में था तब मैं गिर गया। जब आप किसी संग्रह (माता-पिता इकाई में) से बच्चे (ऑब्जेक्ट) को हटाते हैं और फिर एक ही संग्रह में एक ही संग्रह में नई इकाइयों को जोड़ते हैं, तो मध्य में फ्लश किए बिना, हाइबरनेट "हटाएं" से पहले "सम्मिलित" करेगा। यदि बच्चे के तालिका में इसके स्तंभों में से एक में एक अनूठी बाधा है, और आप उम्मीद कर रहे हैं कि आप इसका उल्लंघन नहीं करेंगे क्योंकि आपने पहले से ही कुछ डेटा हटा दिया है (जैसे मैं था), तो निराश होने के लिए तैयार हो जाओ। हाइबरनेट मंच सुझाता है:

  1. यह एक डीबी डिजाइन दोष था, फिर से डिजाइन;
  2. हटाए गए और आवेषण के बीच में फ्लश (या यदि आप करेंगे);

मैं दोनों नहीं कर सका, और हाइबरनेट स्रोत को ट्विकिंग और फिर से कंपाइलिंग समाप्त कर दिया। यह कोड की केवल 1 पंक्ति थी। लेकिन यह पता लगाने का प्रयास लगभग 27 कप कॉफी और 3 नींद की रात के बराबर था।

यह आपकी टीम पर कोई वास्तविक विशेषज्ञ नहीं होने के कारण हाइबरनेट का उपयोग करते समय समस्याएं और क्विर्क का एक उदाहरण हो सकता है (विशेषज्ञ: दर्शन के बारे में पर्याप्त ज्ञान और हाइबरनेट के आंतरिक कार्य के साथ)। आपकी समस्या, समाधान, कॉफी का लीटर, और नींद की रात की गिनती अलग-अलग हो सकती है। लेकिन आप विचार समझ गये।

+0

फ़्लशिंग प्रतिबद्ध नहीं है, यह अभी तक लेनदेन के लिए आपके द्वारा बताए गए परिवर्तनों को धक्का देता है। यदि आपके पास ऑटो प्रतिबद्ध है तो यह प्रतिबद्ध होगा। –

+0

एक विशेषज्ञ बिल्कुल वही है जो हमारे पास नहीं है। हम सरोगेट सलाहकार के रूप में इंटरनेट पर (आमतौर पर Google) पर भरोसा कर रहे हैं। आपको वोट देना – magius

1

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

बेशक इसका नकारात्मक हिस्सा है। एक गर्म शॉट हाइबरनेट डेवलपर बनने से पहले, आपको यह पता चल जाएगा कि आप एक गोलाकार छेद में एक वर्ग फिट करने की कोशिश कर रहे हैं। आप जानते हैं कि आप क्या करना चाहते हैं, और हाइबरनेट तस्वीर में आने से पहले आपको यह कैसे करना था, लेकिन इसे करने के हाइबरनेट तरीके को ढूंढना ... काफी समय ले सकता है।

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

/ऐस

5

मैं हमेशा पाया है हाइबरनेट थोड़ा जटिल और जानने के लिए मुश्किल हो सकता है। लेकिन JPA (जावा पर्सिस्टेंस एपीआई) और EJB (एंटरप्राइज़ जावा बीन्स) 3.0 कुछ समय के लिए अस्तित्व में है, चीजें बहुत आसान हो गई हैं, इसलिए मैं जावाडोक या एक्सएमएल के माध्यम से मैपिंग बनाने के लिए अपनी कक्षाओं को एनोटेट करना पसंद करता हूं। support in Hibernate देखें। जोड़ा गया बोनस यह है कि यदि आवश्यक हो तो बाद में डेटाबेस ढांचे को बदलने के लिए यह संभव है (लेकिन सहज नहीं)। मैंने अच्छे परिणामों के साथ OpenJPA का उपयोग किया है।

हाल ही में मैं JCR (जावा सामग्री रिपोजिटरी) का उपयोग कर रहा हूं। मुझे इस तरह से प्यार है कि मेरे मॉड्यूल एक डेटा स्टोरेज साझा कर सकते हैं और मैं संरचना और गुणों को विकसित कर सकता हूं। मुझे नोड्स और गुणों के साथ काम करना बहुत आसान लगता है, बल्कि मेरे ऑब्जेक्ट्स को डेटाबेस में मैप करना। एक अच्छा कार्यान्वयन Jackrabbit है।

वसंत के लिए, इसमें बहुत सी विशेषताएं हैं, लेकिन कॉन्फ़िगर करने के लिए आवश्यक XML की मात्रा का अर्थ है कि मैं इसका कभी भी उपयोग नहीं करूंगा। इसके बजाय मैं Guice का उपयोग करता हूं और बिल्कुल इसे प्यार करता हूं।

राउंडअप के लिए, मैं आपके संदेह डेवलपर्स को दिखाऊंगा कि कैसे हाइबरनेट अपने जीवन को आसान बना देगा। वसंत के लिए मैं गंभीरता से जांच करता हूं कि क्या गुइस एक व्यवहार्य विकल्प है और फिर यह दिखाने का प्रयास करें कि कैसे वसंत/गुइस विकास को बेहतर और आसान बनाता है।

+0

मैं सहमत हूं, मैं ढांचे के प्रशंसक नहीं हूं जिसके लिए बहुत अधिक एक्सएमएल-कॉन्फ़िगरेशन की आवश्यकता है। हालांकि वसंत ने उस अर्थ में बहुत कुछ सुधार लिया है, फिर भी यह एक्सएमएल मुक्त नहीं है। यह एक कारण है कि हमने सीखने के लिए अपना आसान तरीका लॉन्च किया है - शून्य कॉन्फ़िगरेशन के साथ - गिसिस के शीर्ष पर निर्मित एमवीसी फ्रेमवर्क: [geeMVC] (https://github.com/commerceboard/geemvc)। क्यों पहले वहाँ इतने सारे एमवीसी ढांचे हैं? एक और जोड़ने के पीछे हमारे [प्रेरणा] (https://github.com/commerceboard/geemvc/wiki/Motivation-Behind-geeMVC) देखें। – michaeldd

0

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

आप अपने सीखने-वक्र को कम करने के लिए AppFuse पर विचार करना चाह सकते हैं: एक एप्लिकेशन उत्पन्न करें, अध्ययन करें और इसे अनुकूलित करें, और आप जाएं।

7

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

आपको समस्या को समझने और समाधान प्राप्त करने के लिए Open Session in View आलेख पढ़ने की आवश्यकता होगी। यदि आप वसंत का उपयोग कर रहे हैं तो यह blog article दृश्य समस्या में खुले सत्र के वसंत समाधान का वर्णन करता है।

1

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

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

आपके एप्लिकेशन और/या डेटाबेस के डिज़ाइन के आधार पर, ऐसे प्रश्न भी हैं जिन्हें आपको यह सुनिश्चित करने के लिए बाधा डालना होगा कि ढांचे में प्रदर्शन में बाधा नहीं आती है।

1

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

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

1

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

किसी भी ढांचे के लिए मौजूदा प्रोजेक्ट को फिर से निकालना दर्दनाक होगा, लेकिन रिफैक्टरिंग प्रक्रिया में अक्सर दीर्घकालिक रखरखाव के लिए गंभीर लाभ होते हैं।

1

शीर्ष उत्तर का उल्लेख है कि हाइबरनेट को खराब तरीके से दस्तावेज किया गया है। मैं सहमत हूं कि ऑनलाइन संदर्भ पुस्तिका अधिक पूर्ण हो सकती है। हालांकि, हाइबरनेट के लेखकों द्वारा लिखी गई एक पुस्तक, 'Java persistence with Hibernate' प्रत्येक हाइबरनेट उपयोगकर्ता के लिए जरूरी है और बहुत ही पूर्ण है।

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