एक्सएमएल कॉन्फ़िगरेशन बनाम एनोटेशन आधारित कॉन्फ़िगरेशन [बंद]


131

कुछ बड़ी परियोजनाओं में मैं हाल ही में काम कर रहा हूं, यह एक या दूसरे (XML या एनोटेशन) को चुनने के लिए तेजी से महत्वपूर्ण हो जाता है। जैसे-जैसे प्रोजेक्ट बढ़ते हैं, स्थिरता के लिए स्थिरता बहुत महत्वपूर्ण है।

मेरे प्रश्न हैं: एनोटेशन-आधारित कॉन्फ़िगरेशन पर XML- आधारित कॉन्फ़िगरेशन के क्या फायदे हैं और XML- आधारित कॉन्फ़िगरेशन पर एनोटेशन-आधारित कॉन्फ़िगरेशन के क्या फायदे हैं?


मान लें कि आप एनोटेशन की तरह मतलब है @Componentऔर @Autowired, यह एक गलत द्विभाजन है। आपके कॉन्फ़िगरेशन को बनाने के अन्य तरीके हैं, जिसमें JavaConfig और groovy config शामिल हैं।
बेकर


भी इस एक जांच करें stackoverflow.com/questions/8428439/...
pramodc84

जवाबों:


199

एनोटेशन में उनका उपयोग होता है, लेकिन XML कॉन्फ़िगरेशन को मारने के लिए वे एक रजत गोली नहीं हैं। मैं दोनों को मिलाने की सलाह देता हूँ!

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

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

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

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


शानदार जवाब के लिए धन्यवाद! मुझे निर्णय लेने में कुछ कठिनाई हो रही है कि किसका उपयोग करें। यह SO उत्तर कहता है कि वे डिकम्पलिंग को बढ़ावा देते हैं जबकि यह ब्लॉग पोस्ट कहता है कि वे तंग युग्मन को बढ़ावा देते हैं! आपके जवाब ने वास्तव में मेरे लिए समस्या को स्पष्ट कर दिया।
मिकायला माकी

5
मैं इस सलाह को संक्षेप में बताता हूं: AOP के लिए एनोटेशन का उपयोग करें (लेन-देन को एक पहलू के रूप में माना जा सकता है, उदाहरण के लिए), लेकिन निर्भरता इंजेक्शन के लिए इसका उपयोग न करें।
बकर

1
क्या यह उत्तर आजकल भी सामयिक है (2015)?
sp00m

1
ज्यादातर मामलों में, ज्यादातर लोगों को लगता है कि एनोटेशन को प्राथमिकता दी जाती है
जुन्चेन लियू

31

यहाँ एक व्यापक मुद्दा है, जो कि बाहरी बनाम इनलेटेड मेटा-डेटा का है। यदि आपका ऑब्जेक्ट मॉडल केवल एक ही तरह से लगातार चलने वाला है, तो इनलेटेड मेटा-डेटा (यानी एनोटेशन) अधिक कॉम्पैक्ट और पठनीय हैं।

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

न तो एक बेहतर है, और इसलिए दोनों का समर्थन किया जाता है, हालांकि एनोटेशन अधिक फैशनेबल हैं। परिणामस्वरूप, जेपीए जैसे नए हेयर-ऑन-फायर फ्रेमवर्क उन पर अधिक जोर देते हैं। देशी हाइबरनेट जैसे अधिक परिपक्व एपीआई दोनों की पेशकश करते हैं, क्योंकि यह ज्ञात है कि दोनों में से कोई भी पर्याप्त नहीं है।


13

मैं हमेशा एनोटेशन के बारे में सोचता हूं कि कोई ऐसा संकेतक है जो किसी वर्ग के लिए सक्षम है, या वह दूसरों के साथ कैसे बातचीत करता है।

दूसरी ओर स्प्रिंग एक्सएमएल कॉन्फ़िगरेशन मेरे लिए सिर्फ इतना है कि कॉन्फ़िगरेशन

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

उपयोग करना @Autowire, @Elementरूपरेखा को इंगित करने के लिए कि कक्षा के साथ क्या करना है एनोटेशन का अच्छा उपयोग।

URL को @Webserviceएनोटेशन में डालना खराब शैली है।

लेकिन यह सिर्फ मेरी राय है। इंटरैक्शन और कॉन्फ़िगरेशन के बीच की रेखा हमेशा स्पष्ट नहीं होती है।


एनोटेशन और एनोटेशन आधारित कॉन्फ़िगरेशन (जावा कॉन्फ़िगरेशन) दो अलग-अलग चीजें हैं और ओपी बाद के बारे में पूछता है जबकि आप पूर्व के बारे में बात करते हैं।
लकी

6

मैं कुछ वर्षों से स्प्रिंग का उपयोग कर रहा हूं और एक्सएमएल की मात्रा की आवश्यकता निश्चित रूप से थकाऊ हो रही थी। स्प्रिंग 2.5 में नए XML स्कीमा और एनोटेशन सपोर्ट के बीच मैं आमतौर पर ये काम करता हूं:

  1. ऑटोलोड कक्षाओं के लिए "कंपोनेंट-स्कैन" का उपयोग करना जो @Repository, @Service या @Component का उपयोग करते हैं। मैं आमतौर पर हर बीन को एक नाम देता हूं और फिर @Resource का उपयोग करके उन्हें एक साथ तार देता हूं। मुझे लगता है कि यह प्लंबिंग बहुत बार नहीं बदलती है, इसलिए एनोटेशन से समझ में आता है।

  2. सभी एओपी के लिए "एनओपी" नामस्थान का उपयोग करना। यह वास्तव में बहुत अच्छा काम करता है। मैं अभी भी इसे लेन-देन के लिए उपयोग करता हूं क्योंकि सभी जगह पर @ ट्रान्सैक्शनल को एक तरह से खींचना है। आप किसी भी सेवा या भंडार पर विधियों के लिए नामित बिंदु बना सकते हैं और बहुत जल्दी सलाह को लागू कर सकते हैं।

  3. मैं हाइबरनेट को कॉन्फ़िगर करने के लिए HibernateJpaVendorAdapter के साथ LocalContainerEntityManagerFactoryBean का उपयोग करता हूं। यह हाइबरनेट को क्लासपथ पर @Entity कक्षाओं को आसानी से ऑटो-डिस्कवर करता है। तब मैं LCEMFB का जिक्र करते हुए "फैक्ट्री-बीन" और "फैक्ट्री-विधि" का उपयोग करके एक नाम सेशनफैक्टरी सेम बनाता हूं।


5

एनोटेशन-ओनली एप्रोच का उपयोग करने में एक महत्वपूर्ण हिस्सा यह है कि "बीन नेम" की अवधारणा कमोबेश चली जाती है (महत्वहीन हो जाती है)।

स्प्रिंग में "बीन नाम" कार्यान्वयन कक्षाओं पर अमूर्तता का एक अतिरिक्त स्तर बनाता है। XML सेम के साथ परिभाषित और उनके बीन नाम के सापेक्ष संदर्भित हैं। एनोटेशन के साथ उन्हें उनके वर्ग / इंटरफ़ेस द्वारा संदर्भित किया जाता है। (हालांकि सेम नाम मौजूद है, आपको इसे जानने की आवश्यकता नहीं है)

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


5

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

आप निश्चित रूप से एक मिश्रित दृष्टिकोण अपना सकते हैं, लेकिन यह मेरे लिए खतरनाक लगता है यदि केवल इसलिए, संभवतः, यह नए डेवलपर्स के लिए एक प्रोजेक्ट पर यह पता लगाने में मुश्किल करेगा कि विभिन्न वस्तुओं को कहां कॉन्फ़िगर किया गया है या मैप किया गया है।

मुझे नहीं पता; अंत में XML नर्क मुझे वह सब बुरा नहीं लगता।


4

यह इस बात पर निर्भर करता है कि आप जो कुछ भी कॉन्फ़िगर करना चाहते हैं, क्योंकि कुछ विकल्प हैं जो एनोटेशन के साथ कॉन्फ़िगर नहीं किए जा सकते हैं। यदि हम इसे एनोटेशन के पक्ष से देखते हैं:

  • प्लस: एनोटेशन कम बातूनी हैं
  • माइनस: एनोटेशन कम दिखाई देते हैं

यह आपके लिए है कि क्या अधिक महत्वपूर्ण है ...

सामान्य तौर पर मैं एक तरह से चुनने और उत्पाद के कुछ बंद हिस्से पर इसका उपयोग करने की सिफारिश करूंगा ...

(कुछ अपवादों के साथ: उदाहरण के लिए, यदि आप XML आधारित कॉन्फ़िगरेशन चुनते हैं, तो @Autowire एनोटेशन का उपयोग करना ठीक है। यह मिश्रण है, लेकिन यह पठनीयता और स्थायित्व दोनों में मदद करता है)


4

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

मेरा पसंदीदा तरीका एनोटेशन के बिना (या न्यूनतम) जावा आधारित कॉन्फ़िगरेशन है। http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-java


3

मैं गलत हो सकता हूं, लेकिन मुझे लगा कि एनोटेशन (जैसा कि जावा के @टैग और सी # एस [एट्रीब्यूट] में है) एक संकलन-समय विकल्प था, और एक्सएमएल एक रन-टाइम विकल्प था। मुझे लगता है कि बराबर नहीं हैं और अलग-अलग पेशेवरों और विपक्ष हैं।


तथ्य यह है कि एनोटेशन एक संकलन समय की बात है, एनोटेशन आधारित कॉन्फ़िगरेशन का एक प्रो है, हालांकि एनोटेशन और एक्सएमएल दोनों कॉन्फ़िगरेशन के लिए तरीके हैं और इस संदर्भ में वे एक ही चीज़ को प्राप्त करते हैं। जैसे। वर्ग पर एनोटेशन का उपयोग करने के विपरीत एक xml फ़ाइल में हाइबरनेट मैपिंग कॉन्फ़िगर करना।
abarax

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

3

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

  • सर्वर विशिष्ट कॉन्फ़िगरेशन (सर्वर पर संसाधनों के लिए पूर्ण पथ की तरह): स्प्रिंग एक्सएमएल फ़ाइल
  • अन्य सेम के सदस्यों के रूप में सेम को इंजेक्ट करना (या कई सेम में वसंत एक्सएमएल परिभाषित मूल्य का पुन: उपयोग करना): एनोटेशन

मुख्य अंतर यह है कि आपको सभी बदलते सर्वर-विशिष्ट कॉन्फ़िगरेशन के लिए कोड को फिर से इकट्ठा करने की आवश्यकता नहीं है, बस xml फ़ाइल को संपादित करें। वहाँ भी लाभ है कि कुछ कॉन्फ़िगरेशन परिवर्तन टीम के सदस्यों द्वारा किए जा सकते हैं जो सभी कोड को शामिल नहीं समझते हैं।


2

DI कंटेनर के दायरे में, मुझे लगता है कि एनोटेशन आधारित DI जावा एनोटेशन के उपयोग का दुरुपयोग कर रहा है। ऐसा कहकर, मैं इसे आपके प्रोजेक्ट में व्यापक रूप से उपयोग करने की अनुशंसा नहीं करता। यदि आपकी परियोजना को वास्तव में DI कंटेनर की शक्ति की आवश्यकता है, तो मैं Xml आधारित कॉन्फ़िगरेशन विकल्प के साथ स्प्रिंग IoC का उपयोग करने की सलाह दूंगा।

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

आपको डीआई कंटेनर के गलत संदर्भ में उपयोग से बचने की कोशिश करनी चाहिए।


2

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

कृपया निम्न लिंक देखें। वे उपयोगी भी हो सकते हैं।

  1. एक्सएमएल बनाम एनोटेशन, फायदे और नुकसान
  2. http://www.ibm.com/developerworks/library/j-cwt08025/

1

यह क्लासिक 'कॉन्फ़िगरेशन बनाम कन्वेंशन' प्रश्न है। व्यक्तिगत स्वाद ज्यादातर मामलों में जवाब तय करता है। हालाँकि, व्यक्तिगत रूप से मैं कन्वेंशन पर कॉन्फ़िगरेशन (यानी XML आधारित) को प्राथमिकता देता हूं। IMO IDE पर्याप्त रूप से इतना मजबूत है कि XML के कुछ लोगों को दूर करने के लिए लोग अक्सर w / बिल्डिंग और XML आधारित दृष्टिकोण को बनाए रखते हैं। अंत में, मुझे कॉन्फ़िगरेशन (जैसे कि XML कॉन्फ़िगरेशन फ़ाइल बनाने, बनाए रखने और तैनात करने के लिए उपयोगिताओं के निर्माण) का लाभ लंबे समय में कन्वेंशन से मिलता है।


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

1

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


1

मेरे अनुभव से एनोटेशन कॉन्फ़िगरेशन के कुछ पेशेवरों और विपक्ष हैं:

  • जब यह जेपीए कॉन्फ़िगरेशन की बात आती है, क्योंकि यह एक बार किया जाता है और आमतौर पर काफी बार नहीं बदला जाता है तो मैं एनोटेशन कॉन्फ़िगरेशन से चिपके रहना पसंद करता हूं। शायद कॉन्फ़िगरेशन की एक बड़ी तस्वीर देखने की संभावना के बारे में एक चिंता है - इस मामले में मैं MSQLWorkbench आरेख का उपयोग करता हूं।
  • Xml कॉन्फ़िगरेशन एप्लिकेशन की एक बड़ी तस्वीर प्राप्त करने के लिए बहुत अच्छा है, लेकिन यह रनटाइम तक कुछ त्रुटियों को खोजने के लिए बोझिल हो सकता है। इस मामले में वसंत @Configuration एनोटेशन एक बेहतर विकल्प के रूप में लगता है क्योंकि यह आपको एक बड़ी तस्वीर देखने के साथ-साथ संकलन समय पर कॉन्फ़िगरेशन को मान्य करने की अनुमति देता है।
  • वसंत विन्यास के लिए मैं दोनों दृष्टिकोणों को संयोजित करना पसंद करता हूं: @Configuration का उपयोग करें सेवाओं के साथ एनोटेशन का करें और डेटा स्रोत और स्प्रिंग कॉन्फ़िगरेशन सामान के लिए xml कॉन्फ़िगरेशन जैसे संदर्भ: घटक-स्कैन बेस-पैकेज = "..."
  • लेकिन xml विन्यास बिट्स जावा एनोटेशन जब यह प्रवाह विन्यास (स्प्रिंग वेब फ्लो या लेक्सडेन वेब फ्लो) की बात आती है, क्योंकि यह पूरी व्यवसाय प्रक्रिया का एक बड़ा चित्र देखना बेहद महत्वपूर्ण है। और एनोटेशन दृष्टिकोण के साथ इसे लागू करने के लिए बोझिल लगता है।

मैं दोनों दृष्टिकोणों के संयोजन को प्राथमिकता देता हूं - जावा एनोटेशन और आवश्यक xml न्यूनतम जो कॉन्फ़िगरेशन नरक को कम करते हैं।


1

स्प्रिंग फ्रेमवर्क के लिए मुझे @Component एनोटेशन का उपयोग करने और "घटक-स्कैन" विकल्प को सेट करने में सक्षम होने का विचार पसंद है ताकि स्प्रिंग मेरी जावा बीन्स को पा सके ताकि मुझे अपनी सभी सेम को XML में परिभाषित न करना पड़े, न ही JavaConfig। उदाहरण के लिए, स्टेटलेस सिंगलटन जावा बीन्स के लिए जिसे केवल अन्य वर्गों (एक इंटरफ़ेस के माध्यम से आदर्श रूप से) तक वायर्ड करने की आवश्यकता होती है, यह दृष्टिकोण बहुत अच्छी तरह से काम करता है। सामान्य तौर पर, स्प्रिंग बीन्स के लिए, मैं बीन्स को परिभाषित करने के लिए स्प्रिंग एक्सएमएल डीएसएल से सबसे अधिक भाग में चला जाता हूं, और अब जावाकोनफिग और स्प्रिंग एनोटेशन्स के उपयोग के पक्ष में हूं क्योंकि आपको अपने कॉन्फ़िगरेशन के कुछ संकलन समय और कुछ रीफैक्टरिंग समर्थन मिलते हैं जो आप 'डॉन' करते हैं। टी स्प्रिंग एक्सएमएल कॉन्फ़िगरेशन के साथ मिलता है। मैं कुछ दुर्लभ मामलों में दोनों को मिलाता हूं, जहां मैंने पाया है कि JavaConfig / एनोटेशन XML कॉन्फ़िगरेशन का उपयोग करके उपलब्ध नहीं है।

Hibernate ORM (अभी तक JPA का उपयोग नहीं किया है) के लिए, मैं अभी भी XML मैपिंग फ़ाइलों को पसंद करता हूं क्योंकि कुछ हद तक डोमेन मॉडल कक्षाओं में एनोटेशन द क्लीन आर्किटेक्चर का उल्लंघन करता है जो कि एक लेयरिंग आर्किटेक्चरल स्टाइल है जिसे मैंने पिछले कुछ वर्षों में अपनाया है। उल्लंघन इसलिए होता है क्योंकि इसमें हाइबरनेट या जेपीए पुस्तकालयों जैसी दृढ़ता से संबंधित चीजों पर निर्भर रहने के लिए कोर लेयर की आवश्यकता होती है और यह डोमेन मॉडल POJOs को थोड़ा कम दृढ़ता से अनभिज्ञ बना देता है। वास्तव में कोर लेयर किसी भी अन्य बुनियादी ढाँचे पर निर्भर नहीं है।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.