2011-12-23 20 views
9

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

मेरा प्रश्न यह है कि हम किस प्रकार के पैटर्न की तलाश कर रहे हैं, यह इंगित करता है कि हमें एक नई विधि बनाना चाहिए। मैं आपकी प्रतिक्रिया की सराहना करता हूं।

उत्तर

1

एक सामान्य नियम के रूप में, हमेशा उन परिस्थितियों को कार्यात्मक संस्थाओं के रूप में सोचें। यदि कोड का एक टुकड़ा कार्यात्मक रूप से कार्य करता है (जटिल स्ट्रिंग रूपांतरण, पार्सिंग, आदि), तो आपको पुन: प्रयोज्य विधि लिखनी चाहिए। यदि वह फ़ंक्शन किसी निश्चित प्रकार के लिए विशिष्ट है, तो extension method लिखें।

1

आप Action<> या Func<> के अपने फ़ंक्शन के अंदर एक स्थानीय चर बना सकते हैं और कोड स्निपेट को असाइन कर सकते हैं। फिर आप अपने काम के अंदर हर जगह इसका उपयोग अपने वर्ग को बहुत कम सहायक कार्यों के साथ प्रदूषित किए बिना कर सकते हैं।

2

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

इसी प्रकार के सवाल

+0

धन्यवाद देवेंद्र। ये कुछ बहुत अच्छी जानकारी लिंक हैं –

3

मैं सूखी सिद्धांत के बारे में पढ़कर शुरू होगा (तुम्हारा दोहराएँ न करें elf) उम्मीद है कि यह आपको अपने प्रश्न के लिए एक अच्छा जवाब देगा, जो एक सवाल है कि सभी डेवलपर्स को खुद से पूछना चाहिए, महान सवाल !!

Don't repeat yourself

मैं सूखी पर छोड़, क्योंकि यह इस तरह के एक सरल लेकिन शक्तिशाली अवधारणा है कि कुछ पढ़ने और अभ्यास का एक बहुत अच्छा ऐड पाने के लिए की आवश्यकता होगी चाहते थे देखें। लेकिन मुझे सीधे आपके प्रश्न (आईएमएचओ),

यदि आप अपनी विधि को एक ऐसा नाम नहीं दे सकते जो वास्तव में आपकी विधि क्या कर रहा है, तो इसे प्रतिबिंबित करने के लिए प्रयास करें।

आप अपने कोड को आसानी से ड्रिल कर पाएंगे, पुन: प्रयोज्य टुकड़े दिखाए जाएंगे, और आप शायद कभी भी कोड दोहराना नहीं पाएंगे।

मैं यह भी करूँगा भले ही इसका मतलब केवल कोड की कुछ पंक्तियों के साथ हो।

इस अभ्यास के बाद अपने कोड को अर्थ देते हैं, यह पठनीय और उम्मीद के मुताबिक, और निश्चित रूप से अधिक पुन: प्रयोज्य

+0

धन्यवाद बासम, मैंने आपके द्वारा प्रदान किए गए लिंक में पुस्तक खरीदी और इसे पढ़ा होगा। हालांकि मैंने सिद्धांत के बहुत सारे पढ़ा है लेकिन आवेदन की कमी है। –

+0

@AbdulWheheed मैंने अपने उत्तर में अधिक जानकारी दी, उम्मीद है कि यह आपके कुछ प्रश्नों का उत्तर देगा। –

4

एक विधि में बहुत अधिक कार्यक्षमता न रखें/वर्ग कर देगा। single responsibility principle का पालन करने का प्रयास करें। उस दृष्टिकोण से परिचित होने में कुछ समय लगेगा। लेकिन एक बार जब आप उस स्तर तक पहुंच जाएंगे, तो आप देखेंगे कि यह सब कुछ स्वयं ही किया गया है। कोडिंग से पहले, खुद से पूछने का प्रयास करें, आपकी अवधारणा में कौन सी कार्यात्मक इकाइयां शामिल हैं।

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

  1. PdfParser - यह एक पीडीएफ
  2. अनुक्रमणिका की सामग्री के साथ आप प्रदान करता है - पार्सर और मायने रखता है सार्थक शब्द से इनपुट हो जाता है
  3. रिपोजिटरी - यह दृढ़ता के लिए है; यह सामान्य बनाया जा सकता है; तो बस repository.Get<IndexData>(filename) या कुछ

आपको इंटरफेस के खिलाफ कोड करने का प्रयास करना चाहिए। विशेष रूप से जब किसी प्रकार का यूआई शामिल होता है। उदाहरण के लिए, आप WinForms के साथ चैट क्लाइंट विकसित कर रहे हैं। यदि आप MVC/MVVM -pattern का पालन करते हैं, तो आप आसानी से (यानी Form ऑब्जेक्ट के विरुद्ध कोडिंग से आसान) क्लाइंट के WPF संस्करण के साथ अपने मूल तर्क का उपयोग कर सकते हैं।

0

यदि आप पुन: प्रयोज्यता के लिए कोई विधि बनाते हैं, लेकिन इसे एक से अधिक स्थानों में उपयोग न करें, तो आपके विधि की पुन: प्रयोज्यता वास्तव में सत्यापित नहीं होती है। जब यह समझ में आता है तो विधियों को निकालें, और जब आप वास्तव में कोड का पुन: उपयोग करने का अवसर प्राप्त करते हैं तो पुन: प्रयोज्यता के लिए उन तरीकों को फिर से डिजाइन करें।

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