मैं कहूंगा कि जिस तरह से आपने पहले किया था उसी तरह से रहना चाहिए। आपके उदाहरण में मापदंडों की संख्या बहुत अधिक नहीं है, लेकिन विकल्प बहुत अधिक भयानक हैं।
मानचित्र - आपके द्वारा उल्लिखित दक्षता की बात है, लेकिन यहां बड़ी समस्या यह है:
- कॉल करने वालों को पता नहीं है कि आपको किसी
और चीज़ का हवाला दिए बिना क्या भेजना है ... क्या आपके पास javadocs है जो बताती है कि वास्तव में क्या कुंजी और
मान का उपयोग किया जाता है? यदि आप करते हैं (जो बहुत अच्छा है), तो बहुत सारे मापदंडों का होना कोई समस्या नहीं है।
- विभिन्न तर्क प्रकारों को स्वीकार करना बहुत मुश्किल हो जाता है। आप या तो इनपुट मापदंडों को एक प्रकार से प्रतिबंधित कर सकते हैं, या मानचित्र <स्ट्रिंग, ऑब्जेक्ट> का उपयोग कर सकते हैं और सभी मानों को डाल सकते हैं। दोनों विकल्प ज्यादातर समय भयानक होते हैं।
रैपर ऑब्जेक्ट्स - यह समस्या को केवल इसलिए बढ़ा देता है क्योंकि आपको रैपर ऑब्जेक्ट को पहले स्थान पर भरने की आवश्यकता होती है - सीधे आपकी विधि के बजाय, यह पैरामीटर ऑब्जेक्ट के कंस्ट्रक्टर के लिए होगा। यह निर्धारित करने के लिए कि समस्या का बढ़ना उचित है या नहीं, उक्त वस्तु के पुन: उपयोग पर निर्भर करता है। उदाहरण के लिए:
इसका उपयोग नहीं करेंगे: यह केवल पहली कॉल पर एक बार उपयोग किया जाएगा, इसलिए 1 पंक्ति से निपटने के लिए बहुत सारे अतिरिक्त कोड ...?
{
AnObject h = obj.callMyMethod(a, b, c, d, e, f, g);
SomeObject i = obj2.callAnotherMethod(a, b, c, h);
FinalResult j = obj3.callAFinalMethod(c, e, f, h, i);
}
इसका उपयोग कर सकते हैं: यहां, यह थोड़ा अधिक कर सकता है। सबसे पहले, यह 3 विधि कॉल के लिए मापदंडों को कारक कर सकता है। यह अपने आप में 2 अन्य लाइनें भी कर सकता है ... इसलिए यह एक अर्थ में एक राज्य चर बन जाता है ...
{
AnObject h = obj.callMyMethod(a, b, c, d, e, f, g);
e = h.resultOfSomeTransformation();
SomeObject i = obj2.callAnotherMethod(a, b, c, d, e, f, g);
f = i.somethingElse();
FinalResult j = obj3.callAFinalMethod(a, b, c, d, e, f, g, h, i);
}
- बिल्डर पैटर्न - यह मेरे विचार में एक विरोधी पैटर्न है। सबसे वांछनीय त्रुटि से निपटने का तंत्र पहले पता लगाने के लिए है, बाद में नहीं; लेकिन बिल्डर पैटर्न के साथ, लापता के साथ कॉल (प्रोग्रामर ने इसे शामिल करने के लिए नहीं सोचा था) अनिवार्य मापदंडों को संकलन समय से चलाने के लिए स्थानांतरित किया जाता है। बेशक अगर प्रोग्रामर जानबूझकर अशक्त या इस तरह के स्लॉट में रखता है, तो वह रनटाइम होगा, लेकिन फिर भी कुछ त्रुटियों को पहले से पकड़ना प्रोग्रामर के लिए खानपान के लिए बहुत बड़ा लाभ है जो उस पद्धति के पैरामीटर नामों को देखने से इनकार करते हैं जो वे बुला रहे हैं। मुझे यह केवल उचित लगता है जब बड़ी संख्या में वैकल्पिक मापदंडों के साथ काम किया जाता है , और फिर भी, लाभ सबसे अच्छा है। मैं बिल्डर "पैटर्न" के बहुत खिलाफ हूं।
दूसरी बात जिस पर लोग विचार करना भूल जाते हैं, वह है इस सब में आईडीई की भूमिका। जब तरीकों में पैरामीटर होते हैं, तो आईडीई आपके लिए अधिकांश कोड उत्पन्न करता है, और आपके पास लाल लाइनें हैं जो आपको याद दिलाती हैं कि आपको क्या आपूर्ति / सेट करने की आवश्यकता है। विकल्प 3 का उपयोग करते समय ... आप इसे पूरी तरह से खो देते हैं। अब यह प्रोग्रामर पर निर्भर है कि वह सही हो जाए, और कोडिंग और संकलन समय के दौरान कोई संकेत नहीं है ... प्रोग्रामर को यह पता लगाने के लिए परीक्षण करना चाहिए।
इसके अलावा, विकल्प 2 और 3, यदि व्यापक रूप से व्यापक रूप से अपनाया गया है, तो बड़ी मात्रा में डुप्लिकेट कोड के कारण रखरखाव के संदर्भ में दीर्घकालिक नकारात्मक प्रभाव पड़ता है। जितना अधिक कोड होता है, उतना ही बनाए रखने के लिए होता है, इसे बनाए रखने के लिए अधिक समय और पैसा खर्च होता है।