2016-05-14 6 views
5

मेरे पास एक सेवा है जो कुछ गुणों से व्यक्ति को वापस करनी चाहिए।जावा विधि नामकरण सम्मेलन और ओवरलोडिंग

पहले एक:: और मैं इन तरीकों के नामकरण के लिए दो रणनीतियों को देखने

getPersonById(int id) 
getPersonByBirthDate(Date date) 
getPersonByBirthDateAndSex(Date date,Sex sex) 
getPersonByNameAndSex(String name,Sex sex) 
getPersonByBirthDateAndNameAndSex(Date date,String name,Sex sex) 
etc.. 

या अधिक भार नियमों को लागू करने निम्न कार्य करें:

getPerson(int id) 
getPerson(Date date) 
getPerson(Date date,Sex sex) 
getPerson(String name,Sex sex) 
getPerson(Date date,String name,Sex sex) 

जो जावा नामकरण परंपरा के अनुसार सही है?

+0

दोनों कन्फेटियन नामकरण के ठीक हैं। लेकिन, एंटरप्राइज़ दुनिया और स्वच्छ कोड सिद्धांत द्वारा, यह पहला विकल्प उपयोग करने के लिए बेहतर है, क्योंकि नाम बताता है कि यह क्या कर रहा है ... –

+0

हाँ मैं @AdnanIsajbegovic से सहमत हूं या आप बाकी गेटर्स के लिए महत्वपूर्ण मूल्यों के लिए कन्स्ट्रक्टर का उपयोग कर सकते हैं – emotionlessbananas

+0

पहला एक - इस तरह कोड दस्तावेज स्वयं। दूसरे के साथ, आपको अपने आईडीई से पूछना पड़ सकता है कि वास्तव में कौन सी विधि कहा जा रहा है, जिससे कोड कम तेज़ी से सुगम हो जाता है। –

उत्तर

2

अधिभार हमेशा बेहतर होता है। कई जावा-आधारित केएनओएनएन फ्रेमवर्क इस दृष्टिकोण का पालन करते हैं। इसके अलावा, ओवरलोडिंग की मुख्य अवधारणा आपके द्वारा उल्लिखित शर्त के कारण है।

अधिभारित विधियों को डेवलपर की पठनीयता को सरल बनाता है क्योंकि कोई अलग नाम याद नहीं रखना चाहिए। इसके अलावा, ग्रहण Ctrl + स्पेस सुविधा हमेशा यह सुझाव देगी कि कौन सी विधि उपयोग करना चाहती है।

+0

"_KNOWN फ्रेमवर्क_" क्या है? –

+0

आप जेडीके से उदाहरण प्रदान कर सकते हैं (उदा। 'स्ट्रिंगबुइडर # एपेंड') – Andrew

+0

@ बॉरिस्टेस्पीडर एटीजी ("आर्ट टेक्नोलॉजी ग्रुप"), ब्रॉडलीफ कॉमर्स, यहां तक ​​कि जावा के पुस्तकालय भी इस दृष्टिकोण का उपयोग करते हैं। सबसे अधिक "ज्ञात" विधि "println()" भी अधिभारित है। :) – Monis

9

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

उदाहरण:

queryPerson().byId(5).run(); 
queryPerson().byName("John").bySex(Sex.MALE).run(); 
queryPerson().bySex(Sex.FEMALE).run(); 

और सेवा एपीआई अब केवल एक अच्छा queryPerson() विधि है।

+0

@ फेबियन, अच्छा विचार, 'queryPerson' में बदल गया – wero

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