मैं एक सहकर्मी के साथ चर्चा कर रहा था, और हमने उपवर्ग के उद्देश्य के बारे में परस्पर विरोधी अंतर्ज्ञान को समाप्त कर दिया। मेरा अंतर्ज्ञान यह है कि यदि उपवर्ग का एक प्राथमिक कार्य अपने माता-पिता के संभावित मूल्यों की एक सीमित सीमा को व्यक्त करना है, तो शायद यह एक उपवर्ग नहीं होना चाहिए। उन्होंने विपरीत अंतर्ज्ञान के लिए तर्क दिया: कि उपवर्ग एक वस्तु के अधिक "विशिष्ट" होने का प्रतिनिधित्व करता है, और इसलिए एक उपवर्ग संबंध अधिक उपयुक्त है।
अपने अंतर्ज्ञान को और अधिक ध्यान से रखने के लिए, मुझे लगता है कि अगर मेरे पास एक उपवर्ग है जो एक मूल वर्ग का विस्तार करता है, लेकिन एकमात्र कोड जो उपवर्ग ओवरराइड करता है वह एक निर्माता है (हाँ, मुझे पता है कि कंस्ट्रक्टर आम तौर पर "ओवरराइड" नहीं करते हैं, मेरे लिए सहन करते हैं), फिर क्या वास्तव में जरूरत थी एक सहायक विधि थी।
उदाहरण के लिए, इसे कुछ हद तक वास्तविक जीवन वर्ग पर विचार करें:
public class DataHelperBuilder
{
public string DatabaseEngine { get; set; }
public string ConnectionString { get; set; }
public DataHelperBuilder(string databaseEngine, string connectionString)
{
DatabaseEngine = databaseEngine;
ConnectionString = connectionString;
}
// Other optional "DataHelper" configuration settings omitted
public DataHelper CreateDataHelper()
{
Type dataHelperType = DatabaseEngineTypeHelper.GetType(DatabaseEngine);
DataHelper dh = (DataHelper)Activator.CreateInstance(dataHelperType);
dh.SetConnectionString(ConnectionString);
// Omitted some code that applies decorators to the returned object
// based on omitted configuration settings
return dh;
}
}
उनका दावा है कि इस तरह एक उपवर्ग होना पूरी तरह से उचित होगा:
public class SystemDataHelperBuilder
{
public SystemDataHelperBuilder()
: base(Configuration.GetSystemDatabaseEngine(),
Configuration.GetSystemConnectionString())
{
}
}
तो, सवाल:
- डिजाइन पैटर्न के बारे में बात करने वाले लोगों में, इनमें से कौन सा अंतर्ज्ञान सही है? क्या उप-संरचना को एक विरोधी पैटर्न के ऊपर वर्णित किया गया है?
- यदि यह एक विरोधी पैटर्न है, तो इसका नाम क्या है?
मैं माफी माँगता हूँ अगर यह एक आसानी से googleable जवाब हो गया है; Google पर मेरी खोजों ने ज्यादातर टेलीस्कोपिंग कंस्ट्रक्टर विरोधी पैटर्न के बारे में जानकारी लौटा दी और वास्तव में मैं क्या देख रहा था।