जब भी मैं एंटी-पैटर्न के बारे में सुनता हूं, मैं एक और शब्द को याद करता हूं। गंध सूँघना।
"डिजाइन की गंध डिजाइन में कुछ संरचनाएं हैं जो मौलिक डिजाइन सिद्धांतों के उल्लंघन का संकेत देती हैं और डिजाइन की गुणवत्ता को नकारात्मक रूप से प्रभावित करती हैं।" ("सॉफ्टवेयर डिजाइन की बदबू आ रही है: तकनीकी ऋण का प्रबंधन")
डिजाइन सिद्धांतों का उल्लंघन करने के आधार पर कई डिज़ाइन की महक को वर्गीकृत किया गया है:
अमूर्त गंध
मिसिंग एब्सट्रैक्शन: यह गंध तब उत्पन्न होती है जब डेटा का क्लाम्प्स या एन्कोडेड स्ट्रिंग्स का उपयोग क्लास या इंटरफ़ेस बनाने के बजाय किया जाता है।
इम्पीरेटिव एब्स्ट्रेक्शन: यह गंध तब उत्पन्न होती है जब किसी ऑपरेशन को क्लास में बदल दिया जाता है।
अधूरा अमूर्त: यह गंध तब उत्पन्न होती है जब एक अमूर्त पूरी तरह से पूरक या परस्पर संबंधित विधियों का समर्थन नहीं करता है।
मल्टीफ़ैसेटेड एब्स्ट्रेक्शन: यह गंध तब उत्पन्न होती है, जब एब्सट्रैक्शन को एक से अधिक जिम्मेदारी सौंपी जाती है।
अनावश्यक अमूर्तता : यह गंध तब होती है जब एक अमूर्त पदार्थ की वास्तव में आवश्यकता नहीं होती है (और इस तरह से बचा जा सकता था) एक सॉफ्टवेयर डिजाइन में पेश किया जाता है।
अभेद्य अमूर्त: यह गंध तब उत्पन्न होती है जब एक अमूर्त अप्रयुक्त छोड़ दिया जाता है (या तो सीधे उपयोग नहीं किया जाता है या पहुंच योग्य नहीं है)।
डुप्लिकेट एब्सट्रैक्शन: यह गंध तब उत्पन्न होती है जब दो या अधिक अमूर्त समान नाम या समान कार्यान्वयन या दोनों होते हैं।
इनकैप्सुलेशन से बदबू आती है
डेफिसिएंसी इनकैप्सुलेशन: यह गंध तब होती है जब एक अमूर्त के एक या अधिक सदस्यों की घोषित पहुंच वास्तव में आवश्यक होती है।
लीकेज एनकैप्सुलेशन: यह गंध तब उत्पन्न होती है जब एक एब्सट्रैक्शन "एक्सपोज़" या "लीक" कार्यान्वयन विवरण अपने सार्वजनिक इंटरफ़ेस के माध्यम से होता है।
मिसिंग एनकैप्सुलेशन: यह गंध तब होता है जब कार्यान्वयन भिन्नता एक अमूर्त या पदानुक्रम के भीतर समझाया नहीं जाता है।
Unexploited एन्कैप्सुलेशन: यह गंध तब उत्पन्न होती है जब क्लाइंट कोड स्पष्ट प्रकार की जांच (जंजीर if- अन्यथा या ऑब्जेक्ट के प्रकार की जांच करने वाले स्विच का उपयोग करके) का उपयोग करता है, बजाय एक पदानुक्रम के भीतर पहले से ही टाइप किए गए प्रकारों में भिन्नता का दोहन करने के।
संशोधन से बदबू आती है
टूटा हुआ मॉडर्नाइजेशन: यह गंध तब उत्पन्न होती है जब डेटा और / या विधियाँ जो आदर्श रूप से एक ही अमूर्त में स्थानीयकृत होनी चाहिए थीं, अलग-अलग और कई सार में फैली हुई हैं।
अपर्याप्त संशोधन: यह गंध तब उत्पन्न होती है जब एक अमूर्त मौजूद होता है जो पूरी तरह से विघटित नहीं हुआ है, और एक और अपघटन इसके आकार, कार्यान्वयन जटिलता या दोनों को कम कर सकता है।
साइक्ली-डिपेंडेंट मॉड्युलराइजेशन: यह गंध तब उत्पन्न होती है जब दो या दो से अधिक एब्स्ट्रैक्ट एक-दूसरे पर प्रत्यक्ष या अप्रत्यक्ष रूप से निर्भर होते हैं (एब्सट्रैक्ट के बीच एक टाइट कपलिंग बनाते हैं)।
हब-लाइक मॉडर्लाइज़ेशन: यह गंध तब उत्पन्न होती है जब एक अमूर्त में निर्भरता (आने वाली और बाहर जाने वाली) दोनों अन्य बड़ी संख्या में होते हैं।
पदानुक्रम में बदबू आती है
गुम पदानुक्रम: यह गंध तब उत्पन्न होती है जब एक कोड खंड सशर्त तर्क (आमतौर पर "टैग किए गए प्रकार" के साथ संयोजन में) का उपयोग स्पष्ट रूप से व्यवहार में भिन्नता का प्रबंधन करने के लिए करता है जहां एक पदानुक्रम बनाया जा सकता था और उन विविधताओं को संक्षिप्त करने के लिए उपयोग किया जा सकता था।
अनावश्यक पदानुक्रम: यह गंध तब उत्पन्न होती है जब संपूर्ण वंशानुक्रम पदानुक्रम अनावश्यक होता है, यह दर्शाता है कि वंशानुक्रम विशेष डिजाइन संदर्भ के लिए अनावश्यक रूप से लागू किया गया है।
अनियंत्रित पदानुक्रम: यह गंध तब उत्पन्न होती है जब पदानुक्रम में प्रकारों के बीच अनावश्यक दोहराव होता है।
वाइड पदानुक्रम: यह गंध तब उत्पन्न होती है जब एक वंशानुगत पदानुक्रम "बहुत" व्यापक होता है जो यह दर्शाता है कि मध्यवर्ती प्रकार गायब हो सकते हैं।
सट्टा पदानुक्रम: यह गंध तब उत्पन्न होती है जब पदानुक्रम में एक या एक से अधिक प्रकार सट्टा प्रदान किया जाता है (यानी, वास्तविक आवश्यकताओं के बजाय कल्पना आवश्यकताओं के आधार पर)।
गहरी पदानुक्रम: यह गंध तब पैदा होती है जब एक वंशानुक्रम पदानुक्रम "अत्यधिक" गहरा होता है।
विद्रोही पदानुक्रम: यह गंध तब उत्पन्न होती है जब एक उपप्रकार अपने सुपरपेप्ट (ओं) द्वारा प्रदान की गई विधियों को खारिज कर देता है।
टूटी हुई पदानुक्रम: यह गंध तब पैदा होती है जब एक सुपरपाइप और इसके उपप्रकार एक "IS- A" रिश्ते को साझा रूप से तोड़-मरोड़ के परिणामस्वरूप साझा नहीं करते हैं।
मल्टीपाथ पदानुक्रम: यह गंध तब उत्पन्न होती है जब एक उपप्रकार सीधे दोनों के साथ-साथ अप्रत्यक्ष रूप से एक पदानुक्रम से विरासत में पदानुक्रम में अनावश्यक विरासत पथों की ओर जाता है।
चक्रीय पदानुक्रम: यह गंध तब उत्पन्न होती है जब पदानुक्रम में एक सुपरपाइप उसके किसी भी उपप्रकार पर निर्भर करता है।
उपरोक्त परिभाषा और वर्गीकरण का वर्णन "सॉफ्टवेयर डिज़ाइन की महक: तकनीकी ऋण का प्रबंध " में किया गया है। कुछ और प्रासंगिक संसाधन यहां मिल सकते हैं ।