2010-07-27 17 views
9

मैं एक ऐसा प्रोग्राम तैयार करने की कोशिश कर रहा हूं जो किसी तृतीय पक्ष API का उपयोग करता हो। तीसरा पक्ष एपीआई 2 9 6 क्षेत्रों के साथ एक इनपुट और 17 9 क्षेत्रों के साथ एक आउटपुट का वर्णन करता है। जाहिर है, मैं वर्गों को इनपुट और आउटपुट का प्रतिनिधित्व करना चाहता हूं। क्या इतने सारे क्षेत्रों के साथ कक्षा तैयार करने के लिए कोई चाल है? क्या मुझे हर क्षेत्र के लिए सामान्य गेटर और सेटर चाहिए?सैकड़ों फ़ील्ड के साथ जावा क्लास को कैसे संभालें?

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

+1

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

उत्तर

5

यिक्स।

एक विकल्प केवल मानचित्र या समान संपत्ति धारक का उपयोग करना है।

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

फिर भी एक और विकल्प:

myObject.setPropertyA("Foo").setPropertyB("Bar").setPropertyC("Baz")... 
: आप एक साथ श्रृंखला setters में सक्षम बनाने, कई गुणों के साथ एकल वर्ग बनाने "अभिव्यक्ति बिल्डर" पैटर्न, जिसमें प्रत्येक "सेटर" वस्तु ही देता है का उपयोग करें, करते हैं

जिसके कारण उन्हें तुरंत और अधिक धाराप्रवाह इंटरफ़ेस बना सकते हैं तो

myObject.setPropertyA("Foo"); 
myObject.setPropertyB("Bar"); 
myObject.setPropertyC("Baz"); 
... 
+0

बिल्डर पैटर्न प्रवाह के लिए +1। मेरे उत्तर में इसे टॉस करने के लिए भूल गए। –

2

यदि अंतिम प्रदर्शन हत्यारा मानदंड नहीं है तो मैं केवल दो हैशटबल का उपयोग करके गंभीरता से विचार करता हूं।

+0

'EnumMap' बहुत तेज़ होना चाहिए (एनम टर्मिनल के गैर-रैखिक पढ़ने की संभावना सबसे खराब हिस्सा होगी, मुझे लगता है, लेकिन यह शायद विभिन्न क्षेत्रों के लिए अलग-अलग कोड से बेहतर है)। –

2

क्या आप सेटर्स/गेटर्स के साथ कक्षा के बजाय java.util.Map का उपयोग कर सकते हैं?

+1

और क्या, क्षेत्र के नाम के लिए 2 9 6 स्थिरांक हैं? इसके अलावा, चूंकि फ़ील्ड विभिन्न अर्थपूर्ण प्रकारों (टेक्स्ट, न्यूमेरिक, आदि) के हैं, इसलिए मुझे मूल्य के रूप में कुछ अमूर्त होना होगा। –

+0

उदाहरण के लिए फ़ील्ड नामों के खिलाफ कोड में तुलना करने की आवश्यकता होने पर आपको किसी भी तरह स्थिरांक बनाना पड़ सकता है। –

+0

@ डेन एक उचित बिंदु है, लेकिन मैं आमतौर पर इसके प्रतिबिंब और कभी-कभी विशेषताओं का उपयोग करता हूं। –

1

वाह, यह बहुत सारे क्षेत्र हैं। भले ही ...

एपीआई इस कक्षा के साथ कैसे सहभागिता करता है? यदि यह आवश्यक वर्ग संरचना के कार्यान्वयन प्रदान करता है, तो आपको निश्चित रूप से इसके साथ जाना चाहिए।

+0

एपीआई निश्चित चौड़ाई प्रारूप में स्थापित सभी क्षेत्रों के साथ एक खूनी स्ट्रिंग की अपेक्षा करता है। वहां कोई वास्तविक मदद नहीं है। –

+0

ओह। मुझे बहुत खेद है :(शुभकामनाएं ... –

3

शायद एपीआई तरीकों लपेट मापदंडों के बोझल संख्या होने और Introduce Parameter Object रिफैक्टरिंग बार-बार, पैरामीटर वस्तुओं में तार्किक संबंधित मानकों समूहीकरण लागू होते हैं, खासकर अगर परिणाम मौजूदा मॉडल वस्तुओं में नक्शा जिसमें adaptor pattern लागू किया जा सकता।

0

तृतीय पक्ष API आउटपुट डेटा से निपटने के लिए कुछ प्रकार/वर्ग, सही घोषित किया जाना चाहिए? यह एपीआई मानना ​​एक जावा क्लास है, तो जाहिर है कि उन्हें अपनी विधि से एक Output ऑब्जेक्ट वापस करने की आवश्यकता है।

यदि यह मामला है, इस एपीआई के साथ बातचीत मैं एक आवरण वस्तु जो

  1. लिपटा इनपुट फ़ील्ड/वस्तु और आउटपुट वस्तु
  2. बन जाएगा करने के लिए केवल क्षेत्रों के लिए सार्वजनिक एक्सेसर तरीकों था मेरी कार्यक्रम के साथ बातचीत के बारे में परवाह

इस तरह, आपके जनसंपर्क के बाकी (मुझे लगता है कि आप सभी 296 क्षेत्रों तक पहुँचने के लिए की आवश्यकता नहीं है) ogram केवल उन क्षेत्रों के अस्तित्व के बारे में जानना आवश्यक है जिन्हें इसके बारे में जानना आवश्यक है, और बाकी के खेतों (और तीसरे पक्ष की वस्तुओं को स्वयं) पूरी तरह छुपा/सारणित किया जाता है।

+0

प्रश्न में संपादित देखें। –

+0

@ सी। रॉस, आपके आवेदन को प्रत्येक इनपुट के बारे में परवाह करता है और इस तीसरे पक्ष एपीआई से आउटपुट? –

+0

95% एक स्थान या दूसरे में उपयोग किया जाता है, अगर केवल रिकॉर्ड करने के लिए उपयोगकर्ता उन्हें देख सकता है। –

2

कोड जनरेशन के बारे में कैसे? आउटपुट पैरामीटर के साथ इनपुट पैरामीटर और दूसरे के साथ एक फाइल बनाएँ। फिर आप जो भी कोड टेम्पलेट चाहते हैं उसे बनाएं: गेटर्स, सेटर्स, स्थिरांक। फिर दोनों को एक साथ गुणा करें।

यदि आपको इसे पुन: आर्किटेक्ट करने की आवश्यकता है, तो बस टेम्पलेट्स को संशोधित करें और पुन: उत्पन्न करें।

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