Avevo una discussione con un collega, e abbiamo finito per avere intuizioni contrastanti sullo scopo della sottoclasse. La mia intuizione è che se una funzione primaria di una sottoclasse è di esprimere un intervallo limitato di valori possibili del suo genitore, allora probabilmente non dovrebbe essere una sottoclasse. Ha sostenuto l'intuizione opposta: quella sottoclasse rappresenta l'essere di un oggetto più "specifico", e quindi una relazione sottoclasse è più appropriata.
Per mettere la mia intuizione in modo più concreto, penso che se ho una sottoclasse che estende una classe genitore, ma l'unico codice che la sottoclasse sovrascrive è un costruttore (sì, so che i costruttori generalmente non "sovrascrivono", sopportami ), quindi quello che era veramente necessario era un metodo di supporto.
Ad esempio, considera questa classe un po 'di vita 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 richiesta è 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 progettazione, quale di queste intuizioni è corretta? La sottoclasse è come descritto sopra un anti-pattern?
- Se si tratta di un anti-pattern, come si chiama?
Mi scuso se questa risulta essere stata una risposta facilmente googleable; le mie ricerche su google hanno per lo più restituito informazioni sull'anti-pattern del costruttore telescopico e non proprio quello che stavo cercando.