delphi - क्या कक्षा के सहायक को नए कोड के विकास में इस्तेमाल किया जाना चाहिए?




oop class-helpers (7)

निर्भर करता है कि आप "नया कोड" से क्या मतलब है

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

लेकिन एक ब्रांड की नई परियोजना में भी आपको मौजूदा क्लास को संशोधित करने की ज़रूरत है जो आप अन्य तरीकों से नहीं बदल सकते (वीसीएल क्लास, थर्ड-पार्टी क्लास आदि)। इस मामले में, निश्चित ही, मैं कहूंगा आगे बढ़ो।

वे और खुद में बुरा नहीं हैं अधिकांश अन्य चीजों की तरह, आपको समझने की आवश्यकता है कि वे एक उचित संदर्भ में कैसे काम करते हैं और उनका उपयोग करते हैं।

डेल्फी 8 ने वीसीएल / आरटीएल को एनआईटी ऑब्जेक्ट पदानुक्रम में मैप करने के उद्देश्य के लिए क्लास हेल्पर्स की शुरुआत की। वे कक्षाओं को ओवरराइड किए बिना या मूल को संशोधित किए बिना किसी मौजूदा वर्ग में तरीकों को इंजेक्शन लगाने की अनुमति देते हैं। डेल्फी के बाद के संस्करणों में क्लास हेल्पर्स में सुधार हुआ और उन्हें Win32 पर पोर्ट किया गया।

मदद में यह कहते हैं, "उन्हें नए कोड के विकास के दौरान उपयोग किए जाने वाले डिज़ाइन टूल के रूप में नहीं देखा जाना चाहिए।"

कक्षा के सहायक लोग पारंपरिक ओओपी का उल्लंघन करते हैं, लेकिन मुझे नहीं लगता कि उन्हें एक बुरी चीज बनाती है क्या यह चेतावनी आवश्यक है?

क्या नये वर्ग के विकास के दौरान कक्षा के सहायकों का उपयोग किया जाना चाहिए?

क्या आप उन्हें नए कोड का विकास करते समय उपयोग करते हैं?

क्यों या क्यों नहीं?

प्रति मैल्कम की टिप्पणियां : नया कोड दैनिक अनुप्रयोग का विकास होता है, जहां आपके पास कुछ तृतीय पक्षीय पुस्तकालय हैं, कुछ मौजूदा कोड, और फिर आप लिख रहे हैं कोड


फैंसी कोड के लिए एक नए उपकरण के रूप में कक्षा सहायकों को गले लगाने से पहले, मुझे लगता है कि आपको ये समझना होगा कि सीमाएं भी शामिल हैं। एक वर्ग के लिए एक क्लास सहायक प्रदान करना संभव है। तो क्या होगा अगर आप अपनी कक्षाओं के लिए कक्षा सहायकों को प्रदान करते हैं, और आपकी कक्षाएं एक सामान्य वर्ग से प्राप्त होती हैं जो कुछ अन्य ने कक्षा सहायक प्रदान की है?

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

मेरी राय किसी भी तरह से ...


मैं इस में वीगर से सहमत हूं: आपातकालीन उपकरण के रूप में कक्षा के सहायक। जब आप जानते हैं कि वे उपलब्ध कराए गए समय में काम करने का एकमात्र तरीका है। बाद में, अगर इसके लिए समय है, तो उन्हें हटा दें।

मैं एक बार एक parametrization बात भूल गया था, और अगर वर्ग सहायकों डेल्फी 2006 में मौजूद नहीं था यह एक विशाल समय लगेगा ... कक्षा सहायकों के साथ, यह सही काम करने के लिए 6 घंटे लग गए लेकिन, यह एक आपातकालीन स्थिति थी - कक्षा सहायकों एक अस्पष्ट भाषा की सुविधा है और यह कार्यक्रम के प्रवाह का पालन करने के लिए नए डेवलपर्स को कठिनाइयां बनाती है।


मैं खुद को एक डिजाइन के निर्माण के रूप में अधिक से अधिक उपयोग करता हूं।

जिन स्थितियों में मैं उनका उपयोग करता हूं:

  • क्लाइंट / सर्वर सेटअप में, मैं क्लाइंट हेल्पर्स के साथ साझा आधार-कक्षाएं प्रदान करता है ताकि सर्वर- या क्लाइंट-केवल कार्यक्षमता प्रदान की जा सके
  • काम टूलिंग कार्यों के साथ वीसीएल / आरटीएल कक्षाओं (और अन्य तृतीय पक्ष कोड) को पूरक करने के लिए।
  • मतभेदों के चारों ओर काम करने के लिए जब कक्षाएं एक ही विरासत वृक्ष को साझा नहीं करती हैं (सहायताकर्ताओं के द्वारा संभवतः सामान्य गणना और आइटम गुण हैं, उदाहरण के लिए)।

वास्तव में, मैं चाहता हूं कि डेल्फी एक ही आधार वर्ग के लिए कई सहायक को स्वीकार करे - अगर मैं सही ढंग से याद कर रहा हूं तो मैंने इसके लिए भी एक अनुरोध दायर किया है


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


शायद आप उपयोग कर सकते हैं एक अच्छा aproach है (जैसा कि मैं इसे का उपयोग करें):

  1. हमेशा कक्षा से मददगारों पर विरासत की वरीयता देते हैं , उन्हें केवल तभी उपयोग करें जब विरासत एक विकल्प नहीं है
  2. नंगे विश्वव्यापी तरीकों से कक्षा सहायकों को प्राथमिकता दें।
  3. अगर आपको यूनिट से अधिक की विस्तार की कार्यक्षमता की आवश्यकता हो रही है, तो कुछ और प्रयास करें ( जैसे कक्षा लपेटर्स )।

नेट एक्सटेंशन तरीकों का तरीका बहुत ही समान है और वही कारण के लिए बनाया गया और समर्थन किया गया है: डेल्फी देशी कोड प्रकार को बनाने की कोशिश करने के लिए डेल्फी.नेट में एक अपग्रेड की बजाय आधार वर्गों का विस्तार "संगत" के साथ .नेट कोड - आईएमएचओ यह बहुत महत्वाकांक्षी था)

वैसे भी, कुछ स्थितियों में डेल्फी कक्षा के सहायक अभी भी काफी उपकरण हैं


अपने एक्सटेन्शन मेथड्स के आसपास माइक्रोसॉफ्ट आधारित लिनक्स भारी। उस रोशनी में आपको नए कोड में क्लास हेपरर्स का उपयोग करना चाहिए, अगर आपके कोड में सुधार होगा। देखें कि कक्षा सहायकों के लिए अच्छे उपयोग क्या हैं? कुछ अच्छे उपयोगों के लिए







class-helpers