2011-01-25 7 views
5

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

<bean class="...ListDTO"> 
<constructor-arg> 
    <map> 
    <entry key="use1key"> 
    <value>use1value</value> 
    </entry> 
    <entry key="use2key"> 
    <value>use2value</value> 
    </entry> 
    </map> 
</constructor-arg> 
<constructor-arg> 
    <map> 
    <entry key="nature1key"> 
    <value>nature1value</value> 
    </entry> 
    <entry key="nature2key"> 
    <value>nature2value</value> 
    </entry> 
    </map> 
</constructor-arg> 
<constructor-arg> 
    <value>false</value> 
</constructor-arg> 
</bean> 

और क्या हुआ? कक्षा के निर्माता ... ListDTO बदल गया और इसलिए बीन स्पष्ट रूप से इस (बहुत verbose IMHO) एक्सएमएल से नहीं बनाया जा सकता है।

क्या कोई मुझे बता सकता है कि यह क्यों अच्छा अभ्यास है (क्या वास्तव में?) जावा कोड के बजाय एक्सएमएल में ऐसी चीज डालने के लिए? यदि यह जावा कोड में था, जैसे ही ... ListDTO बदल गया होगा, यूनिट टेस्ट संकलित करने से इनकार कर दिया होगा (भले ही यूनिट टेस्ट का हिस्सा तुरंत चालू हो जाए कि बीन निष्पादित नहीं हुआ [किसी भी कारण से])।

बोनस प्रश्न: क्या सभी यूनिट परीक्षणों को चलाने के अलावा इन सभी टूटा "एक्सएमएल में बीन्स" आसानी से ढूंढने का कोई तरीका है, देखें कि कौन से लोग असफल हो रहे हैं और फिर कुल्ला और दोहराना चाहते हैं?

मेरे लिए यह एक बहुत ही गंभीर मुद्दा है कि आप एक कन्स्ट्रक्टर बदल सकते हैं और आईडीई कार्य करेगा जैसे सब कुछ ठीक था: इसके लिए औचित्य क्या है? (*)

+0

(*) और लेखन: <निर्माता-आर्ग> झूठी 'झूठा के लिए 'मुझे एक अच्छा औचित्य नहीं दिखता है ... – Gugussee

उत्तर

6

इसके पीछे विचार यह है कि आप केंद्रीय XML कॉन्फ़िगरेशन फ़ाइल में वातावरण (विकास, परीक्षण, उत्पादन) के बीच भिन्नता रखते हैं, और एक अलग कॉन्फ़िगरेशन फ़ाइल का उपयोग करके, आप वातावरण स्विच करते हैं।

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

+0

+1 ... इसलिए केंद्रीय परीक्षण कॉन्फ़िगरेशन फ़ाइल में "पोर्टेबल" होने की आवश्यकता है, जबकि जटिल परीक्षण डेटा संरचनाओं को परिभाषित करने के लिए बीन्स का उपयोग न करें? – Gugussee

+0

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

1

बोनस सवाल: वहाँ एक रास्ता आसानी से एक परियोजना में इन सभी टूट "एक्सएमएल में सेम" खोजने के लिए सभी इकाई परीक्षण चलाने के अलावा, कौन सा विफल हो रही हैं और उसके बाद कुल्ला और दोहरा है?

स्प्रिंग उपकरण सुइट या ग्रहण के लिए स्प्रिंग प्लगइन जांच कर सकते हैं कि एक वसंत विन्यास फाइल सही है (सभी निर्माता पैरामीटर है और अज्ञात setters उपयोग न करें)।

+0

+1, बढ़िया ... मैं उस ग्रहण/वसंत टू सूट टूल में उपयोग करने की कोशिश करूंगा जो स्प्रिंग कॉन्फ़िगरेशन फ़ाइलों को सत्यापित कर सकता है। – Gugussee

0

मुझे लगता है कि आपको स्प्रिंग के साथ काम करते समय स्प्रिंगसोर्स टूल का उपयोग करना चाहिए। आप इसे डाउनलोड कर सकते हैं या तो स्टैंड-अलोन या के रूप में ग्रहण प्लग इन के रूप:

http://www.springsource.com/developer/sts

http://dist.springsource.com/milestone/TOOLS/update/e3.6

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