Design patterns
ठोस
खोज…
परिचय
SOLID क्या है?
SOLID एक स्मरक (स्मृति सहायता) संक्षिप्त है। ठोस सिद्धांतों को सॉफ्टवेयर डेवलपर्स को principles कोड की गंध से बचने में मदद करनी चाहिए ”और अच्छे सोर्सकोड का नेतृत्व करना चाहिए। अच्छे सोर्सकोड का अर्थ इस संदर्भ में है कि सोर्सकोड का विस्तार और रखरखाव करना आसान है। ठोस सिद्धांतों का मुख्य केंद्र वर्ग हैं
क्या उम्मीद:
आपको सोलिड क्यों लगाना चाहिए
पांच ठोस सिद्धांतों को कैसे लागू करें (उदाहरण)
एसआरपी - एकल जिम्मेदारी सिद्धांत
SOLID में S एकल जिम्मेदारी सिद्धांत (SRP) के लिए है।
इस संदर्भ में उत्तरदायित्व का अर्थ परिवर्तन का कारण है, इसलिए सिद्धांत कहता है कि एक वर्ग को बदलने का केवल एक कारण होना चाहिए।
रॉबर्ट सी। मार्टिन ने यह कहा (10 सितंबर 2014 में येल शूल ऑफ मैनेजमेंट में अपने व्याख्यान के दौरान) इस प्रकार है
आप यह भी कह सकते हैं, एक ही वर्ग में विभिन्न कारणों से परिवर्तन करने वाले कार्य न करें।
या
अपनी कक्षाओं में चिंताओं का मिश्रण न करें
एसआरपी लागू करने का कारण:
जब आप एक वर्ग बदलते हैं तो आप कक्षा की अन्य जिम्मेदारियों से संबंधित कार्यक्षमता को प्रभावित कर सकते हैं। जिम्मेदारियों को निम्न स्तर पर रखना साइड इफेक्ट्स के जोखिम को कम करता है।
खराब उदाहरण
हमारे पास एक इंटरफ़ेस IWallet और एक वॉलेट वर्ग है जो IWallet को लागू करता है। वॉलेट हमारे पैसे और ब्रांड को रखता है, इसके अलावा इसे हमारे पैसे को स्ट्रिंग प्रतिनिधित्व के रूप में प्रिंट करना चाहिए। वर्ग द्वारा उपयोग किया जाता है
- एक वेब सेवा
- एक टेक्स्ट राइटर जो यूरोस में पैसे को एक टेक्सफाइल में प्रिंट करता है।
यहाँ SRP का उल्लंघन किया जाता है क्योंकि हमारी दो चिंताएँ हैं:
- पैसे और ब्रांड का भंडारण
- धन का प्रतिनिधित्व।
C # उदाहरण कोड
public interface IWallet
{
void setBrand(string brand);
string getBrand();
void setMoney(decimal money);
decimal getMoney();
string printMoney();
}
public class Wallet : IWallet
{
private decimal m_Money;
private string m_Brand;
public string getBrand()
{
return m_Brand;
}
public decimal getMoney()
{
return m_Money;
}
public void setBrand(string brand)
{
m_Brand = brand;
}
public void setMoney(decimal money)
{
m_Money = money;
}
public string printMoney()
{
return m_Money.ToString();
}
}
अच्छा उदाहरण
एसआरपी के उल्लंघन से बचने के लिए, हमने printMoney
विधि को वॉलेट वर्ग से हटा दिया और इसे एक प्रिंटर वर्ग में रखा। प्रिंटर वर्ग अब मुद्रण के लिए जिम्मेदार है और वॉलेट अब मूल्यों के भंडारण के लिए जिम्मेदार है।
C # उदाहरण कोड
public interface IPrinter
{
void printMoney(decimal money);
}
public class EuroPrinter : IPrinter
{
public void printMoney(decimal money)
{
//print euro
}
}
public class DollarPrinter : IPrinter
{
public void printMoney(decimal money)
{
//print Dollar
}
}
public interface IWallet
{
void setBrand(string brand);
string getBrand();
void setMoney(decimal money);
decimal getMoney();
}
public class Wallet : IWallet
{
private decimal m_Money;
private string m_Brand;
public string getBrand()
{
return m_Brand;
}
public decimal getMoney()
{
return m_Money;
}
public void setBrand(string brand)
{
m_Brand = brand;
}
public void setMoney(decimal money)
{
m_Money = money;
}
}