2016-06-21 11 views
5

तक पहुंचने के लिए गेटर का उपयोग करने के लिए एक अच्छा कोडिंग अभ्यास है हाल ही में मुझे एक ही कक्षा के तरीकों के अंदर निजी आवृत्ति चर का उपयोग करने के लिए गेटर विधि का उपयोग करने के लिए कोड समीक्षा टिप्पणी मिली है। क्या यह वास्तव में एक अच्छा अभ्यास है? मुझे लगता है कि यह कोड में अनावश्यक जटिलता जोड़ रहा है। अनुशंसित तरीका क्या है?क्या यह निजी आवृत्ति चर

public class SomeClass { 
    String abc; 

    public boolean compare(SomeClass otherClass) { 
     otherClass.getAbc().equals(abc); 
    } 
} 

public class SomeClass { 
    String abc; 

    public boolean compare(SomeClass otherClass) { 
     otherClass.getAbc().equals(getAbc()); 
    } 
} 
+3

मैं आमतौर पर परेशान नहीं करता हूं। मैं कक्षा में हूं, और डेटा कक्षा से संबंधित है। – azurefrog

+1

जब उस वर्ग में, गेटर्स और सेटर्स का उपयोग करने का कोई कारण नहीं है। वे एक नियंत्रित फैशन में निजी चर का पर्दाफाश करने के लिए हैं। –

उत्तर

5

मुझे आपके पहले दृष्टिकोण के साथ एक बहुत ही विशिष्ट समस्या दिखाई देती है। आप गेटर्स असंगत रूप से उपयोग कर रहे हैं।

public boolean compare(SomeClass otherClass) { 
    otherClass.getAbc().equals(abc); 
    //.getAbc() for one, but direct access for the other!! 
} 

आप सेब के लिए सेब की तुलना करने के लिए एक विधि के बराबर होती है के लिए है, और अगर आपके चर के एक गेटर (जो मुझे लगता है सार्वजनिक है और अधिरोहित जा सकता है) का उपयोग तुलना के लिए लिया गया है और अन्य से सीधे लिया गया है एक निजी चर (जिसे ओवरराइड नहीं किया जा सकता है), तो आपने अपने कोड को जितना अधिक होना चाहिए उससे कहीं अधिक नाजुक बना दिया है। क्या होगा यदि कोई आपकी कक्षा बढ़ाता है और गेटटर विधि बदलता है? आपका कोड हो जाएगा। इसलिए, दोनों या किसी पर गेटटर का उपयोग करें।

इसे ध्यान में रखते

, इनमें से या तो अपने मूल की तुलना में बेहतर है, क्योंकि व्यवहार और अधिक स्थिर है:

public boolean compare(SomeClass otherClass) { 
    otherClass.abc.equals(abc); 
} 


public boolean compare(SomeClass otherClass) { 
    otherClass.getAbc().equals(getAbc()); 
} 

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

यह पूरी तरह से संभव है कि आपका समीक्षक केवल सामान्य मामले के बारे में बात कर रहा था, लेकिन मुझे लगता है कि उन्होंने शायद समस्या को खराब तरीके से बताया हो।

+0

मैंने एक मंत्र के रूप में एक ही समीक्षा टिप्पणी सुनाई है। मैं बहुत सारे कोड के साथ काम करता हूं जिसमें जेनेरिक गेटर्स और सेटर्स होते हैं, यह हमेशा कचरे की तरह लग रहा है। मेरे द्वारा लिखे गए लेखों को पढ़ने के बाद मुझे लगता है कि मुझे बेहतर encapsulated डिजाइन के बारे में कुछ और सीखना है। मुझे संदेह है कि बहुत से समीक्षकों को भी वास्तव में encapsulation वास्तव में समझ में नहीं आता है। –

3

सिद्धांत रूप में, वर्ग के भीतर गेटर्स और सेटर्स का उपयोग कोड पुन: उपयोग प्रदान कर सकता है, उदाहरण के लिए यदि सेटटर किसी प्रकार की रेंज जांच करता है जो कक्षा के भीतर भी उपयोगी है। अभ्यास में मैंने कभी ऐसा मामला नहीं देखा है जहां यह वास्तव में फायदेमंद था।

आदर्श रूप से एक वर्ग में सेटर्स और गेटर्स नहीं होना चाहिए।

कोई सेटर्स क्यों नहीं? क्योंकि वे परिवर्तनीय स्थिति प्रदान करते हैं जो कई मुद्दों का कारण बनता है। कक्षा चर आदर्श रूप से निर्माता में असाइन किया जाना चाहिए और बाद में कभी नहीं बदलना चाहिए।

कोई गेटर्स क्यों नहीं? क्योंकि एक वर्ग को एक इकाई के रूप में कार्य करना चाहिए। कक्षा बनाने का बिंदु सिर्फ अलग-अलग चर के लिए एक अस्थायी कंटेनर प्रदान करने के लिए नहीं है, केवल एक-एक करके। यह encapsulation नहीं है।

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