2013-05-14 23 views
20

मेरे प्रोग्रामिंग के वर्षों में मैंने अक्सर कक्षाएं बनाई हैं जो बस अपने सेटर्स और गेटर्स के साथ कुछ चर समूहबद्ध करती हैं। मैंने इन प्रकार की ऑब्जेक्ट्स को संदर्भ ऑब्जेक्ट्स, डोमेन ऑब्जेक्ट्स या मॉडल ऑब्जेक्ट्स के संदर्भ में संदर्भित किया है, जिनके संदर्भ में उनका उपयोग किया जाता है। जेनेरिक उपयोग के लिए सबसे उपयुक्त शब्द डेटा ट्रांसफर ऑब्जेक्ट (डीटीओ) लगता है। यह एक पीओजेओ का वर्णन करता है जिसमें केवल एक्सेसर्स और म्यूटेटर शामिल हैं।डेटा ट्रांसफर ऑब्जेक्ट में सार्वजनिक फ़ील्ड

मैंने अभी एक ऐसा ऑब्जेक्ट लिखा है जिसमें चार्ट पर थीम पैरामीटर सेट करने के लिए उपयोग किए जाने वाले लगभग पचास फ़ील्ड शामिल हैं। अब मैं सोच रहा हूं कि सौ गेटर्स और सेटर्स बनाने के बजाय मुझे इन क्षेत्रों को सार्वजनिक रूप से घोषित करना चाहिए। ऐसा करने से सबकुछ मेरे प्रोग्रामिंग प्रवृत्तियों के बारे में बताता है, फिर भी मैं इनकार नहीं कर सकता कि यह मेरे कोड की योग्यता में काफी वृद्धि करेगा और कक्षा में बॉयलरप्लेट कोड की मात्रा को कम करेगा।

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

+0

संभावित डुप्लिकेट की ज्यादा उम्मीद न करें - http://stackoverflow.com/questions/1568091/why-use-getters-and-setters – sanbhat

+0

getters और setters यदि आवश्यक हैं आप 'डीआई' ढांचे जैसे 'स्प्रिंग' या 'jsp: useBean' आदि जैसे कुछ का उपयोग करने का प्रयास करते हैं !!! – NINCOMPOOP

+0

@ सनबहाट: उस प्रश्न के स्वीकृत उत्तर में दिए गए कुछ कारण यहां लागू होते हैं लेकिन सभी नहीं। एक डीटीओ की गुंजाइश और व्यवहार एक सामान्य वर्ग से अलग तो मैं सोच रहा था कि अलग-अलग "नियम" यहाँ लागू होता है। – Lilienthal

उत्तर

23

अधिकतर प्रोग्रामर इसके बारे में सोच किए बिना गेटर्स/सेटर्स के साथ निजी फ़ील्ड में डिफ़ॉल्ट होंगे। लेकिन किसी भी माल-पंथ की तरह, एक सचेत निर्णय लेने के लिए बेहतर है।

सार्वजनिक क्षेत्र की बजाय गेटर/सेटर संयोजन का उपयोग करने का मुख्य कारण यह है कि आप परिभाषा को बदल सकते हैं। इसलिए, यदि आपका डीटीओ घटक के बीच एक इंटरफेस का हिस्सा है, तो गेटर्स का उपयोग करने के लिए सबसे अच्छा। यदि आप आंतरिक कार्यकलापों को बदलते हैं, तो आप पुराने व्यवहार की नकल करने और संगतता बनाए रखने के लिए गेटर को अनुकूलित कर सकते हैं।

एक अन्य कारण यह है कि आप केवल-पढ़ने वाले फ़ील्ड ही बना सकते हैं। अक्सर डीटीओ के लिए, केवल पढ़ने योग्य और अपरिवर्तनीय एक अच्छी पसंद है।

एक तीसरा कारण यह हो सकता है कि आपके डीटीओ को जवाबीन होना चाहिए क्योंकि आप इसे किसी उपकरण में उपयोग करने का इरादा रखते हैं जिसके लिए इसकी आवश्यकता होती है।

यदि इनमें से कोई भी गुण आपके लिए नहीं जाता है, तो सार्वजनिक क्षेत्रों का उपयोग न करने का कोई कारण नहीं है।

एक प्रदर्शन अंतर हालांकि :)

+1

बस मुझे जो जानने की जरूरत है।यदि मैं सारांशित करता हूं कि ऐसा लगता है कि सार्वजनिक क्षेत्रों का उपयोग करना है या नहीं, इस परियोजना के दायरे पर निर्भर करेगा, चाहे वह पुन: उपयोग किया जाएगा या इंटरफेस किया जाएगा और परिवर्तन की संभावना होगी। मैंने यह भी नहीं सोचा था कि गैर-आदिम 'अंतिम' फ़ील्ड अपरिवर्तनीय नहीं होंगे। अगर मैं इस तरह के एक क्षेत्र को केवल पढ़ने के लिए बनाना चाहता था तो मुझे वर्दी पहुंच बनाए रखने के लिए पूरी कक्षा को बदलना होगा। – Lilienthal

+2

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

3

मुझे लगता है कि सार्वजनिक गुणों के साथ 'सेटिंग' या 'थीम' या 'स्टाइल' क्लास रखने के लिए यह बहुत बुरा व्यवहार नहीं है।

रिफैक्टरिंग उपकरणों के साथ आधुनिक IDEs यह तुच्छ मनुष्य के लिए/सेटर एक विशेषता को बढ़ावा देने के लिए यदि आप सेट समय किसी भी जटिल गणनाओं या मूल्यों पर जांच कर देना चाहते हैं।

अक्सर आपके 'सेटथीम' में या जो भी फ़ंक्शन इन सेटिंग्स कक्षाओं का उपभोग करता है वह सत्यापन करने के लिए एक अच्छी साफ जगह है।

इस तरह की सेटिंग्स को सेट करते समय आमतौर पर एक उत्परिवर्तनीय वर्ग के संदर्भ को बनाए रखने के बजाय गहरी प्रतिलिपि वस्तु करना उचित होता है।

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