Stavo discutendo con un collega e alla fine abbiamo avuto intuizioni contrastanti sullo scopo della sottoclasse. La mia intuizione è che se una funzione primaria di una sottoclasse è esprimere un intervallo limitato di possibili valori del suo genitore, allora probabilmente non dovrebbe essere una sottoclasse. Ha sostenuto l'intuizione opposta: quella sottoclasse rappresenta un oggetto più "specifico", e quindi una relazione di sottoclasse è più appropriata.
Per rendere più concreta la mia intuizione, penso che se ho una sottoclasse che estende una classe genitore ma l'unico codice che sovrascrive la sottoclasse è un costruttore (sì, so che i costruttori generalmente non "sovrascrivono", sopporta con me), quindi ciò che era veramente necessario era un metodo di aiuto.
Ad esempio, considera questa classe in qualche modo reale:
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;
}
}
La sua tesi è che sarebbe del tutto appropriato avere una sottoclasse come questa:
public class SystemDataHelperBuilder
{
public SystemDataHelperBuilder()
: base(Configuration.GetSystemDatabaseEngine(),
Configuration.GetSystemConnectionString())
{
}
}
Quindi, la domanda:
- Tra le persone che parlano di modelli di design, quale di queste intuizioni è corretta? La sottoclasse come descritto sopra è un anti-pattern?
- Se è un anti-pattern, come si chiama?
Mi scuso se questa è stata una risposta facilmente googleable; le mie ricerche su google hanno per lo più restituito informazioni sull'anti-modello del costruttore telescopico e non proprio quello che stavo cercando.