आपके समाधान के साथ कुछ भी गलत नहीं है।
लेकिन मेरी व्यक्तिगत प्राथमिकता यह होगी कि वे तरीके उतने उपयोगी नहीं हैं। और जिस भी वस्तु से वे भाग रहे हैं उसके इंटरफ़ेस को जटिल करें।
यह void moveCameraTo(double latitude, double longitude)
वास्तव में कोड को सरल नहीं करता है, क्योंकि मुझे कोई समस्या नहीं दिखती है बस moveCameraTo(new LatLng(latitude, longitude));
इसमें जगह है। इस पद्धति से भी आदिम जुनून की बू आती है।
void moveCameraTo(Location location)
बेहतर साबित द्वारा हल किया जा सकता है Location.ToLatLng()
विधि और बुला moveCameraTo(location.ToLatLng())
।
अगर यह C # था और अगर इस तरह के तरीके वास्तव में आवश्यक थे, तो मैं उन्हें उदाहरण के तरीकों के बजाय विस्तार विधियों के रूप में पसंद करूंगा। यदि आप अमूर्त और इकाई-परीक्षण का प्रयास करते हैं तो विस्तार विधियों का उपयोग वास्तव में स्पष्ट हो जाएगा। चूंकि साधारण रूपांतरणों के साथ कई ओवरलोड्स के बजाय सिर्फ एक विधि को नकली बनाना अधिक आसान होगा।
मुझे लगता है कि इस तरह से मैं यह जानने की जिम्मेदारी को खत्म करता हूं कि उदाहरण के लिए, एक अन्य कक्षा में एक लैटलिंग क्या है।
मुझे कोई कारण नहीं दिखता कि यह समस्या क्यों होगी। जब तक आपका कोड संदर्भ वर्ग जिसमें शामिल है void moveCameraTo(LatLng latLng)
, यह अभी भी अप्रत्यक्ष रूप से निर्भर करता है LatLng
। भले ही वह वर्ग कभी प्रत्यक्ष रूप से तात्कालिक न हो।
और फ़ंक्शन को कॉल करने से पहले आपको डेटा तैयार करने की आवश्यकता नहीं है।
मुझे समझ नहीं आ रहा है कि आपका क्या मतलब है। यदि इसका अर्थ है नई आवृत्ति बनाना या कक्षाओं को एक से दूसरे में बदलना, तो मुझे इससे कोई समस्या नहीं है।
इसके बारे में सोचते हुए, मुझे लगता है कि मैं जो कह रहा हूं वह भी .NET के एपीआई डिजाइन द्वारा समर्थित है। ऐतिहासिक रूप से, बहुत सारे .NET वर्ग ने विभिन्न मापदंडों के साथ बहुत सारे ओवरलोड होने के अपने दृष्टिकोण का पालन किया, और अंदर सरल रूपांतरण। लेकिन इससे पहले कि विस्तार के तरीके मौजूद थे। अधिक आधुनिक .NET कक्षाएं अपने स्वयं के एपीआई में अधिक हल्के वजन वाली होती हैं और यदि कोई पैरामीटर ओवरलोड के साथ कोई विधि है, तो उन्हें विस्तार विधियों के रूप में प्रदान किया जाता है। पुराना उदाहरण NLog ILogger है जिसमें लॉग करने के लिए लिखने के लिए दर्जनों ओवरलोड हैं। उसकी तुलना नए Microsoft.Extensions.Logging.ILogger से करें जिसमें कुल 3 विधियाँ हैं (और केवल 1 यदि आप लॉगिंग को स्वयं ही गिन लें)। लेकिन विस्तार विधियों के रूप में बहुत से सहायक और विभिन्न पैरामीरिजेशन हैं ।
मुझे लगता है कि इस उत्तर से पता चलता है कि कुछ भाषाओं में इस तरह के डिजाइन बनाने के उपकरण होंगे। मुझे ज्यादा जावा पता नहीं है, इसलिए मुझे यकीन नहीं है कि कोई समकक्ष होगा। लेकिन यहां तक कि सादे स्थिर तरीकों का उपयोग करना एक विकल्प हो सकता है।