यह मत करो; यह सामान को पूरा करेगा और आपको इसकी आवश्यकता नहीं होगी
... जवाब है कि मैंने 2 साल पहले यहां लिखा होगा। अब, हालांकि, मुझे यकीन नहीं है; वास्तव में, हाल के महीनों में मैंने इस प्रारूप में पुराने कोड को माइग्रेट करना शुरू कर दिया है, इसलिए नहीं कि मेरे पास करने के लिए बेहतर कुछ भी नहीं है, क्योंकि मुझे नई सुविधाओं को लागू करने या मौजूदा लोगों को बदलने के लिए वास्तव में इसकी आवश्यकता है। मैं समझता हूं कि अन्य लोगों ने यहां उस कोड को देखा है, लेकिन मुझे लगता है कि यह एक ऐसी चीज है जो गंभीर विचार के योग्य है।
लाभ
लाभ के बीच मुख्य कोड को संशोधित करने और विस्तारित करने की क्षमता है । यदि तुम प्रयोग करते हो
class Point {
int x,y;
// other point operations
}
इसके बजाय केवल दो पूर्णांकों को पास करने के बजाय - जो कुछ ऐसा है, दुर्भाग्य से, कई इंटरफेस करते हैं - फिर बाद में एक और आयाम जोड़ना आसान हो जाता है। या करने के लिए प्रकार बदलें double
। यदि आप इसका उपयोग करते हैं List<Author> authors
या List<Person> authors
इसके बजाय List<String> authors
बाद में एक लेखक का प्रतिनिधित्व करने के लिए अधिक जानकारी जोड़ने के लिए बहुत आसान हो जाता है। इसे इस तरह से लिखना यह महसूस करता है कि मैं स्पष्ट कह रहा हूं, लेकिन व्यवहार में मैं कई बार खुद इस तरह से तार का उपयोग करने का दोषी हूं, खासकर उन मामलों में जहां यह शुरू में स्पष्ट नहीं था, फिर मुझे इससे अधिक की आवश्यकता होगी एक स्ट्रिंग।
मैं वर्तमान में कुछ स्ट्रिंग सूची को रिफैक्ट करने की कोशिश कर रहा हूं जो मेरे पूरे कोड में इंटरवेट की गई है क्योंकि मुझे वहां अधिक जानकारी की आवश्यकता है, और मुझे दर्द महसूस होता है। "
इसके अलावा, मैं ब्लॉग के लेखक से सहमत हूं कि यह अधिक अर्थ संबंधी जानकारी देता है , जिससे पाठक को समझने में आसानी होती है। जबकि मापदंडों को अक्सर सार्थक नाम दिए जाते हैं और प्रलेखन की एक समर्पित रेखा मिलती है, यह अक्सर फ़ील्ड या स्थानीय लोगों के साथ ऐसा नहीं होता है।
अंतिम लाभ स्पष्ट कारणों के लिए, प्रकार की सुरक्षा है, लेकिन मेरी नजर में यह एक मामूली बात है।
कमियां
लिखने में अधिक समय लगता है । एक छोटा वर्ग लिखना तेज और आसान है, लेकिन सरल नहीं है, खासकर यदि आपको इन वर्गों की बहुत आवश्यकता है। यदि आप कुछ नए रैपर क्लास को लिखने के लिए हर 3 मिनट में खुद को रोक पाते हैं, तो यह आपकी एकाग्रता के लिए एक वास्तविक बाधा भी हो सकती है। हालाँकि, मुझे लगता है कि इस प्रयास की अवस्था आम तौर पर किसी भी कोड को लिखने के पहले चरण में होगी; मैं आमतौर पर एक बहुत अच्छा विचार प्राप्त कर सकता हूं कि संस्थाओं को शामिल होने की क्या आवश्यकता है।
इसमें बहुत अधिक निरर्थक बसने वाले (या निर्माण) और गेटर्स शामिल हो सकते हैं । ब्लॉग लेखक new Point(x(10), y(10))
इसके बजाय वास्तव में बदसूरत उदाहरण देता है new Point(10, 10)
, और मैं यह जोड़ना चाहूंगा कि उपयोग में भी Math.max(p.x.get(), p.y.get())
इसके बजाय सामान शामिल हो सकता है Math.max(p.x, p.y)
। और लंबे कोड को अक्सर पढ़ने के लिए कठिन माना जाता है, और बस इतना ही। लेकिन सभी ईमानदारी में, मुझे लगता है कि बहुत सारी कोड ऑब्जेक्ट्स को इधर-उधर ले जाती है, और केवल चुनिंदा तरीके ही इसे बनाते हैं, और इसके कम विवरण तक पहुँच की भी कम आवश्यकता होती है (जो वैसे भी OOPy नहीं है)।
विवादास्पद
मैं कहूंगा कि यह कोड की पठनीयता के साथ मदद करता है या नहीं यह बहस का मुद्दा है। हां, अधिक अर्थ संबंधी जानकारी, लेकिन लंबे समय तक कोड। हां, प्रत्येक स्थानीय की भूमिका को समझना आसान है, लेकिन यह समझना कठिन है कि आप इसके साथ क्या कर सकते हैं जब तक आप जाकर इसके प्रलेखन को नहीं पढ़ते।
सोचा के अधिकांश अन्य प्रोग्रामिंग स्कूलों के साथ, मुझे लगता है कि यह एक को चरम पर ले जाने के लिए अस्वस्थ है। मैं अपने आप को कभी भी x और y को अलग करते हुए नहीं देखता हूँ। मुझे लगता Count
है कि जब एक int
पर्याप्त होना आवश्यक नहीं है । मैं unsigned int
सी में उपयोग को नापसंद करता हूं - जबकि सैद्धांतिक रूप से अच्छा है, यह सिर्फ आपको पर्याप्त जानकारी नहीं देता है, और यह आपके कोड को बाद में उस जादुई -1 का समर्थन करने के लिए प्रतिबंधित करता है। कभी-कभी आपको सादगी की आवश्यकता होती है।
मुझे लगता है कि ब्लॉग पोस्ट चरम पक्ष पर एक सा है। लेकिन कुल मिलाकर, मैंने दर्दनाक अनुभव से सीखा है कि इसके पीछे मूल विचार सही सामान से बना है।
मेरे पास ओवर-इंजीनियर कोड के लिए एक गहरा विरोध है। मैं वास्तव में करते हैं। लेकिन सही इस्तेमाल किया, मुझे नहीं लगता कि यह ओवर-इंजीनियरिंग है।