कपलिंग (Coupling) मॉड्यूल्स (क्लासेस) के बीच परस्पर निर्भरता की डिग्री है। अच्छा डिज़ाइन लूज़ कपलिंग को बढ़ावा देता है।
लूज़ कपलिंग (Loose Coupling) - वांछनीय
- क्लासेस एक-दूसरे पर न्यूनतम निर्भर करती हैं।
- इंटरफेस/अब्स्ट्रैक्शन पर निर्भर, कंक्रीट इम्प्लीमेंटेशन पर नहीं।
- डिपेंडेंसी इंजेक्शन (DI) इसका मुख्य पैटर्न है।
लाभ:
- एक मॉड्यूल का परिवर्तन दूसरों को नहीं तोड़ता।
- टेस्टेबिलिटी बढ़ाता है (मॉकिंग आसान)।
- कोड रखरखाव आसान।
- अन्य घटकों में परिवर्तन से कम प्रभावित।
- पुन: उपयोग योग्य घटक।
टाइट कपलिंग (Tight Coupling) - टालें
- क्लासेस एक-दूसरे की कंक्रीट इम्प्लीमेंटेशन पर सीधे निर्भर।
new ConcreteClass()सीधे कंस्ट्रक्टर में।- परिवर्तन का प्रभाव फैलता है (रिपल इफेक्ट)।
- परीक्षण कठिन (मॉक करना मुश्किल)।
- पुन: उपयोग सीमित।
उदाहरण तुलना
// टाइट कपलिंग
class OrderService
{
private SqlRepository repo = new SqlRepository(); // कंक्रीट पर निर्भर
public void Save(Order o) => repo.Save(o);
}
// लूज़ कपलिंग
interface IRepository { void Save(Order o); }
class OrderService
{
private readonly IRepository repo;
public OrderService(IRepository repo) => this.repo = repo; // DI
public void Save(Order o) => repo.Save(o);
}
सिद्धांत: "अब्स्ट्रैक्शन पर निर्भर करें, कंक्रीशन पर नहीं" (DIP - डिपेंडेंसी इनवर्जन प्रिंसिपल)।