क्या बहुत से प्रयोग / आयात कथन खराब डिज़ाइन या कोड गंध का संकेत देते हैं?


13

आमतौर पर, मुझे क्लास फ़ाइल के शीर्ष पर कुछ स्टेटमेंट का उपयोग करते हुए देखा जाता है। उदाहरण:

using System.Collections.Generic;
using System.IO;
using System.Xml.Linq;

लेकिन जिस प्रोजेक्ट में मैं काम कर रहा हूं, कई मौकों पर मुझे एक क्लास फाइल में 20 या उससे अधिक usings / आयात दिखाई देते हैं। क्या यह बुरा डिज़ाइन है? ऐसा लगता है कि एक काम करने के लिए डिज़ाइन की गई कक्षाएं केवल कुछ घटकों पर निर्भर होनी चाहिए।


1
विजुअल स्टूडियो के पास अप्रयुक्त usingबयानों को हटाने का एक विकल्प है । आप यह देखना चाहते हैं कि उन 20 में से कितने वास्तविक उपयोग में हैं।
डैन पिचेलमैन

@ दान-वे सभी उपयोग में हैं क्योंकि मैंने अप्रयुक्त का उपयोग अप्रयुक्तों को बाहर निकालने के लिए किया है।
जॉन रेनोर

क्या आपने IoC को जोड़ने, कंस्ट्रक्टर इंजेक्शन में बदलने और / या कुछ एकीकरण बिंदुओं को इनलाइन लैम्ब्डा में परिवर्तित करने की कोशिश की है, यह देखने के लिए कि क्या यह usingवर्गों की संख्या में वृद्धि किए बिना बयानों की संख्या को कम कर देगा ? ध्यान रखें कि कक्षाओं या स्रोत फ़ाइलों की संख्या बढ़ने से स्रोत कोड प्रबंधन ओवरहेड बढ़ जाएगा।
रवांग

2
IoC सिर्फ समस्या को छुपाता है।
तेलस्टिन

1
उन चीजों में से कुछ लगभग भाषा और प्रोग्रामिंग शैली का हिस्सा हैं जो इसे प्रोत्साहित करती हैं, जैसे कि संग्रह। जेनरिक और LINQ, इसलिए मुझे उन लोगों के बारे में चिंता नहीं करनी चाहिए। मैं शायद दूसरों पर अपना ध्यान केंद्रित करूँगा। अधिकांश वर्गों को शायद IO को सीधे करने की आवश्यकता नहीं होनी चाहिए, इसलिए, अगर हर जगह यह पाया जाता है कि जिम्मेदारियों या खराब स्तर की कुछ गड़बड़ी है, लेकिन यह आवेदन पर निर्भर करता है।
एरिक इद्ट

जवाबों:


21

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

उस ने कहा, यह एक गंध है - कभी-कभी यह आपको कुछ बुरा करने की ओर ले जाता है, और कभी-कभी यह सिर्फ एक गलत अलार्म है।


मुझे लगता है कि असली "कोड गंध" होगा यदि आयातित नामस्थान सभी हैं, या अधिकतर, बेतहाशा अलग-अलग उद्देश्य से हैं। सच कहूँ तो, मैं शायद ही कभी usingएक एकल सी # फ़ाइल में 6 से 8 से अधिक है ।
ग्रेग बर्गार्ड्ट

2
मैं आपको एक दूसरा +1 देना चाहूंगा यदि मैं सही तरीके से "कोड गंध" शब्द का उपयोग कर सकता हूं!
जोर्ग डब्ल्यू मित्तग

@Greg - मैं सहमत हूँ, आमतौर पर "usings" संबंधित हैं। मुझे लगता है कि इस मामले में यह अमूर्तता से जुड़ा मामला है क्योंकि लगभग "15-20 दिन" आवेदन नामस्थान और बाकी .net ढांचे से आते हैं।
जॉन रेन्नोर

2

एक कक्षा को कोई बड़ा और कोई छोटा नहीं होना चाहिए जो एक इच्छित कार्य प्रदान करने के लिए आवश्यक हो।

एक आवेदन में, मेरे पास एक एन्क्रिप्शन वर्ग है जिसमें एक काम है: डेटा एन्क्रिप्ट करें। मुख्य कार्यक्षमता, लॉगिंग और अपवाद हैंडलिंग के बीच, पर्यावरण को इस एक काम को करने के लिए 11 अलग-अलग नामस्थान आयातों की आवश्यकता होती है।

मेरे लिए खुद को 'आयात कम करना' बताना कठिन है। या आयातित नेमस्पेस की संख्या की गिनती करके मेरी कक्षा की सफलता का न्याय करना। मैं इसे अलग-थलग नहीं कर सकता, अलगाव में, एक वर्ग की सफलता के संकेत के रूप में। मेरे लिए, 'आयात' वर्ग के अंत का साधन है। यदि वर्ग की नौकरी अच्छी तरह से परिभाषित है, तो आयात सहित सहायक प्रणाली के भीतर बाकी सब कुछ, खुद का ख्याल रखेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.