इनमें से अधिकतर गंध कुछ गलत होने का संकेत हैं। इसलिए, उन्हें अपने आप ठीक करने की आवश्यकता नहीं है ... (हालांकि, आपको इसे देखना चाहिए।)
आप पिछले सभी कोड गंध (भाग 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 } }
मेरा विश्वास अभी भी है, अगर आपको डेटा संरचनाएं और उनके आविष्कार सही मिलते हैं, तो अधिकांश कोड खुद ही लिखेंगे।
पीटर ड्यूश
सॉफ्टवेयर इंजीनियरिंग महान उद्धरण
कुछ वस्तुएं हमेशा साथ रहती हैं। हम उन्हें विभाजित क्यों नहीं करते?
टीएल; डीआर: एकजुट आदिम वस्तुओं को एक साथ यात्रा करें
यदि दो या अधिक आदिम वस्तुओं को एक साथ चिपकाया जाता है, व्यापार तर्क दोहराया जाता है और उनके बीच नियम होते हैं, तो हमें आपत्ति की मौजूदा अवधारणा को खोजने की आवश्यकता होती है।
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
कोड स्मेल 140 - शॉर्ट सर्किट मूल्यांकन
कोड स्मेल 06 - बहुत चालाक प्रोग्रामर
एक कंप्यूटर एक बेवकूफ मशीन है जिसमें अविश्वसनीय रूप से स्मार्ट चीजें करने की क्षमता है, जबकि कंप्यूटर प्रोग्रामर अविश्वसनीय रूप से बेवकूफ चीजें करने की क्षमता वाले स्मार्ट लोग हैं। संक्षेप में, वे एक परिपूर्ण मेल हैं।
बिल ब्रायसन