मेरी राय में बुरी तरह से युग्मित मॉड्यूल का नंबर एक संकेतक द्विपक्षीय निर्भरता है। उदाहरण के लिए, Module1 एक मॉड्यूल 2 में कुछ फ़ंक्शन को कॉल करता है और Module2 Module1 में कुछ फ़ंक्शन को कॉल करता है।
ज्यादातर इंटरफेस यूनिडायरेक्शनल होने चाहिए। यदि कॉल करने वाले मॉड्यूल को कॉलिंग मॉड्यूल के लिए कुछ जानकारी पास करने की आवश्यकता होती है जो कॉल के भाग के रूप में वापस नहीं आती है, तो उसे किसी प्रकार के संदेश पासिंग या इवेंट ट्रिगरिंग तंत्र जैसे संदेश कतार का उपयोग करना चाहिए। आदर्श रूप से, संदेश को पास करने वाले इंटरफ़ेस के हैंडल को कुछ आरंभीकरण या पंजीकरण प्रक्रिया के दौरान पास किया जाना चाहिए। यह पूरी तरह से इंटरफ़ेस को एब्सट्रैक्ट करता है कि मॉड्यूल वास्तव में परवाह नहीं करता है कि घटना किसके लिए है ... इसलिए इसे डिकोड किया गया है।
एक और संकेत तब है जब एक मॉड्यूल लगातार कुछ विशिष्ट डेटा सेट के लिए कुछ अन्य मॉड्यूल को कॉल कर रहा है। इससे आपको यह सवाल करना चाहिए कि वास्तव में डेटा सेट का मालिक कौन होना चाहिए। ऐसा क्यों है कि प्रश्न में इस मॉड्यूल को हमेशा उस डेटा को देखने की आवश्यकता होती है जो किसी अन्य मॉड्यूल से संबंधित है?
बोलने के लिए एक तीसरा उपकरण अपने आप से पूछना है, "क्या मैं इस मॉड्यूल को बाहर निकाल सकता हूं और अन्य मॉड्यूल में बदलाव की आवश्यकता के बिना इसे प्रतिस्थापित कर सकता हूं।
यह किसी भी तरह से एक विस्तृत सूची नहीं है, लेकिन वे शीर्ष तीन चीजें हैं जो मैं खुद को सॉफ्टवेयर डिजाइन करते समय पूछता हूं।