Je discutais avec un collègue et nous avons fini par avoir des intuitions contradictoires quant à l'objectif du sous-classement. Mon intuition est que si l'une des fonctions principales d'une sous-classe est d'exprimer une plage limitée de valeurs possibles de son parent, il ne devrait probablement pas s'agir d'une sous-classe. Il a plaidé pour l'intuition opposée: cette sous-classe représente un objet plus "spécifique", et donc une relation de sous-classe est plus appropriée.
Pour mettre mon intuition plus concrètement, je pense que si j'ai une sous-classe qui étend une classe parente mais que le seul code que cette sous-classe écrase est un constructeur ce qui était vraiment nécessaire était une méthode d'assistance.
Par exemple, considérons cette classe un peu réelle:
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;
}
}
Il affirme qu'il serait tout à fait approprié d'avoir une sous-classe comme celle-ci:
public class SystemDataHelperBuilder
{
public SystemDataHelperBuilder()
: base(Configuration.GetSystemDatabaseEngine(),
Configuration.GetSystemConnectionString())
{
}
}
Alors, la question:
- Parmi les personnes qui parlent de modèles de conception, laquelle de ces intuitions est correcte? Le sous-classement décrit ci-dessus est-il un anti-motif?
- Si c'est un anti-motif, quel est son nom?
Je m'excuse si cela s'avère être une réponse facile à comprendre; mes recherches sur google ont pour la plupart retourné des informations sur l'anti-motif du constructeur télescopique et pas vraiment ce que je cherchais.