Saya sedang berdiskusi dengan rekan kerja, dan kami akhirnya memiliki intuisi yang bertentangan tentang tujuan subklasifikasi. Intuisi saya adalah bahwa jika fungsi utama dari sebuah subclass adalah untuk mengekspresikan kisaran terbatas dari nilai yang mungkin dari induknya, maka itu mungkin seharusnya tidak menjadi sebuah subclass. Dia berpendapat untuk intuisi yang berlawanan: bahwa subclass mewakili objek yang lebih "spesifik", dan karena itu hubungan subclass lebih tepat.
Untuk menempatkan intuisi saya lebih konkret, saya berpikir bahwa jika saya memiliki subclass yang memperpanjang kelas induk tetapi satu-satunya kode yang menimpa subclass adalah konstruktor (ya, saya tahu konstruktor umumnya tidak "menimpa", bersabarlah), lalu yang benar-benar dibutuhkan adalah metode pembantu.
Sebagai contoh, pertimbangkan kelas kehidupan nyata ini:
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;
}
}
Klaimnya adalah bahwa sepenuhnya pantas untuk memiliki subkelas seperti ini:
public class SystemDataHelperBuilder
{
public SystemDataHelperBuilder()
: base(Configuration.GetSystemDatabaseEngine(),
Configuration.GetSystemConnectionString())
{
}
}
Jadi, pertanyaannya:
- Di antara orang yang berbicara tentang pola desain, intuisi mana yang benar? Apakah subkelas seperti yang dijelaskan di atas merupakan anti-pola?
- Jika itu anti-pola, apa namanya?
Saya minta maaf jika ini ternyata merupakan jawaban yang mudah di-googleable; pencarian saya di google sebagian besar mengembalikan informasi tentang anti-pola konstruktor telescoping dan tidak benar-benar apa yang saya cari.