यह गंध करता है क्योंकि ऐसे कई उदाहरण हैं जहां इसे संपादित या बेहतर किया जा सकता है।
इनमें से अधिकतर गंध कुछ गलत होने का संकेत हैं। इसलिए, उन्हें अपने आप ठीक करने की आवश्यकता नहीं है ... (हालांकि, आपको इसे देखना चाहिए।)
आप पिछले सभी कोड गंध (भाग i - XXVIII) यहां पा सकते हैं।
आगे है...
क्या तुमने कभी जंगली में एक IEngine देखा है?
टीएल; डीआर: अपनी कक्षाओं में उपसर्ग या प्रत्यय न लगाएं
कुछ भाषाओं में डेटा प्रकार, सार वर्ग या इंटरफेस से संबंधित सांस्कृतिक सम्मेलन होते हैं। ये नाम हमारे मॉडलों को संज्ञानात्मक अनुवादों के साथ लोड करते हैं जिनका पालन करना कठिन होता है।
हमें किस करना चाहिए।
public interface IEngine { void Start(); } public class ACar { } public class ImplCar { } public class CarImpl { }
public interface Engine { void Start(); } public class Vehicle { } public class Car { }
यदि हमारे पास थिसॉरस है, तो हम अजीब नामों की ओर इशारा कर सकते हैं।
सी # में, इंटरफ़ेस के नाम पर "आई" रखना एक आम बात है क्योंकि इसके बिना, आप यह नहीं बता सकते कि यह एक इंटरफ़ेस या कक्षा है या नहीं।
यह एक भाषा गंध है।
अपने मॉडलों के लिए वास्तविक नामों का उपयोग करें।
अनस्प्लैश पर टिम मॉसहोल्डर द्वारा फोटो
कुछ लोग, जब किसी समस्या का सामना करते हैं, सोचते हैं "मुझे पता है, मैं रेगुलर एक्सप्रेशंस का उपयोग करूँगा।" अब उनके सामने दो दिक्कतें हैं।
जेमी ज़विंस्की
सॉफ्टवेयर इंजीनियरिंग महान उद्धरण
डोमेन ऑब्जेक्ट्स में डेटाबेस तक पहुँचना एक कोड गंध है। इसे कंस्ट्रक्टर में करना एक दोहरी गंध है।
टीएल; डीआर: कंस्ट्रक्टर्स को ऑब्जेक्ट्स बनाना चाहिए (और शायद इनिशियलाइज़ करना चाहिए)।
विरासत कोड पर, डेटाबेस व्यावसायिक वस्तुओं से सही ढंग से अलग नहीं होता है।
कंस्ट्रक्टर्स का कभी भी साइड इफेक्ट नहीं होना चाहिए।
एकल जिम्मेदारी सिद्धांत के अनुसार, उन्हें केवल वैध वस्तुओं का निर्माण करना चाहिए
public class Person { int childrenCount; public Person(int id) { childrenCount = database.sqlCall("SELECT COUNT(CHILDREN) FROM PERSON WHERE ID = " . id); } }
public class Person { int childrenCount; // Create a class constructor for the Main class public Person(int id, int childrenCount) { childrenCount = childrenCount; // We can assign the number in the constructor // Accidental Database is decoupled // We can test the object } }
हमारे लिंटर कंस्ट्रक्टर पर SQL पैटर्न ढूंढ सकते हैं और हमें चेतावनी दे सकते हैं।
मजबूत सॉफ़्टवेयर डिज़ाइन करते समय चिंताओं को अलग करना महत्वपूर्ण है, और युग्मन हमारा मुख्य शत्रु है।
<span> अनस्प्लैश पर कैलम हिल द्वारा फोटो </span>
मेरा विश्वास अभी भी है, अगर आपको डेटा संरचनाएं और उनके आविष्कार सही मिलते हैं, तो अधिकांश कोड खुद ही लिखेंगे।
पीटर ड्यूश
सॉफ्टवेयर इंजीनियरिंग महान उद्धरण
कुछ वस्तुएं हमेशा साथ रहती हैं। हम उन्हें विभाजित क्यों नहीं करते?
टीएल; डीआर: एकजुट आदिम वस्तुओं को एक साथ यात्रा करें
यह गंध आदिम जुनून की दोस्त है।
यदि दो या अधिक आदिम वस्तुओं को एक साथ चिपकाया जाता है, व्यापार तर्क दोहराया जाता है और उनके बीच नियम होते हैं, तो हमें आपत्ति की मौजूदा अवधारणा को खोजने की आवश्यकता होती है।
public class DinnerTable { public DinnerTable(Person guest, DateTime from, DateTime to) { Guest = guest; From = from; To = to; } private Person Guest; private DateTime From; private DateTime To; }
public class TimeInterval { public TimeInterval(DateTime from, DateTime to) { // We should validate From < To From = from; To = to; } } public DinnerTable(Person guest, DateTime from, DateTime to) { Guest = guest; Interval = new TimeInterval(from, to); } // Even Better... public DinnerTable(Person guest, Interval reservationTime) { Guest = guest; Interval = reservationTime; }
सामंजस्य पैटर्न के आधार पर जांच कुछ लिंटरों में उपलब्ध है।
समूह व्यवहार सही जगह पर और आदिम डेटा को छुपाएं।
अनस्प्लैश पर डायनामिक वैंग द्वारा फोटो
सॉफ्टवेयर का दिल अपने उपयोगकर्ता के लिए डोमेन से संबंधित समस्याओं को हल करने की क्षमता है। अन्य सभी विशेषताएं, हालांकि वे महत्वपूर्ण हो सकती हैं, इस मूल उद्देश्य का समर्थन करती हैं।
एरिक इवांस
सॉफ्टवेयर इंजीनियरिंग महान उद्धरण
हमने एनएफटी के बारे में बहुत कुछ सुना है। अब, हम फंजिबल अवधारणा में महारत हासिल करते हैं।
टीएल; डीआर: मैपर का सम्मान करें। वास्तविक दुनिया में फंजिबल को फंगिबल बनाएं और इसके विपरीत।
विकिपीडिया के अनुसार:
फंगिबिलिटी एक अच्छे या कमोडिटी की संपत्ति है, जिसकी अलग-अलग इकाइयाँ अनिवार्य रूप से विनिमेय हैं और जिसका प्रत्येक भाग दूसरे भाग से अप्रभेद्य है।
सॉफ्टवेयर में, हम फंगिबल ऑब्जेक्ट्स को दूसरों के साथ बदल सकते हैं।
वास्तविक वस्तुओं के साथ अपनी वस्तुओं की मैपिंग करते समय, हम कभी-कभी आंशिक मॉडल के बारे में भूल जाते हैं और डिज़ाइन पर निर्माण करते हैं।
public class Person implements Serializable { private final String firstName; private final String lastName; public Person(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } } shoppingQueueSystem.queue(new Person('John', 'Doe'));
public class Person { } shoppingQueueSystem.queue(new Person()); // The identity is irrelevant for queue simulation
यह एक अर्थपूर्ण गंध है।
हमें यह जांचने के लिए मॉडल को समझने की जरूरत है कि यह सही है या नहीं।
जो प्रतिमोच्य है उसे प्रतिमोच्य बनाएं और इसके विपरीत।
आसान लगता है लेकिन डिजाइन कौशल और आकस्मिक जटिलता से बचने की आवश्यकता होती है।
अनस्प्लैश पर एंड्री मेटेलेव द्वारा फोटो
लोग सोचते हैं कि कंप्यूटर विज्ञान जीनियस की कला है, लेकिन वास्तविक वास्तविकता इसके विपरीत है, बहुत से लोग छोटे पत्थरों की दीवार की तरह एक दूसरे पर निर्माण करने वाली चीजें कर रहे हैं।
डोनाल्ड नुथ
पठनीयता शॉर्टकट के रूप में बूलियन मूल्यांकन का उपयोग न करें।
टीएल; डीआर: साइड इफेक्ट कार्यों के लिए बूलियन तुलना का उपयोग न करें।
स्मार्ट प्रोग्रामर इस सुधार के लिए कोई पुख्ता सबूत न होने पर भी हैकी और अस्पष्ट कोड लिखना पसंद करते हैं।
समयपूर्व अनुकूलन हमेशा पठनीयता को नुकसान पहुँचाता है।
userIsValid() && logUserIn(); // this expression is short circuit // Does not value second statement // Unless the first one is true functionDefinedOrNot && functionDefinedOrNot(); // in some languages undefined works as a false // If functionDefinedOrNot is not defined does // not raise an error and neither runs
if (userIsValid()) { logUserIn(); } if(typeof functionDefinedOrNot == 'function') { functionDefinedOrNot(); } // Checking for a type is another code smell
हम जाँच सकते हैं कि क्या कार्य अशुद्ध हैं और शॉर्ट सर्किट को IF में बदल सकते हैं।
कुछ वास्तविक लिंटर हमें इस समस्या से आगाह करते हैं
स्मार्ट दिखने की कोशिश न करें।
हम अब 50 के दशक में नहीं हैं।
एक टीम डेवलपर बनें।
कोड स्मेल 140 - शॉर्ट सर्किट मूल्यांकन
कोड स्मेल 06 - बहुत चालाक प्रोग्रामर
कोड स्मेल 149 - वैकल्पिक चेनिंग
Unsplash पर Michael Dziedzic द्वारा फोटो
एक कंप्यूटर एक बेवकूफ मशीन है जिसमें अविश्वसनीय रूप से स्मार्ट चीजें करने की क्षमता है, जबकि कंप्यूटर प्रोग्रामर अविश्वसनीय रूप से बेवकूफ चीजें करने की क्षमता वाले स्मार्ट लोग हैं। संक्षेप में, वे एक परिपूर्ण मेल हैं।
बिल ब्रायसन
अगला लेख: 5 और कोड गंध।