Estaba teniendo una discusión con un compañero de trabajo, y terminamos teniendo intuiciones conflictivas sobre el propósito de la subclase. Mi intuición es que si una función principal de una subclase es expresar un rango limitado de valores posibles de su padre, entonces probablemente no debería ser una subclase. Argumentó la intuición opuesta: que la subclase representa que un objeto es más "específico" y, por lo tanto, una relación de subclase es más apropiada.
Para poner mi intuición más concretamente, creo que si tengo una subclase que extiende una clase padre pero el único código que la subclase anula es un constructor (sí, sé que los constructores generalmente no "anulan", tengan paciencia conmigo), entonces lo que realmente se necesitaba era un método auxiliar.
Por ejemplo, considere esta clase de la vida real:
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;
}
}
Su afirmación es que sería completamente apropiado tener una subclase como esta:
public class SystemDataHelperBuilder
{
public SystemDataHelperBuilder()
: base(Configuration.GetSystemDatabaseEngine(),
Configuration.GetSystemConnectionString())
{
}
}
Entonces, la pregunta:
- Entre las personas que hablan sobre patrones de diseño, ¿cuál de estas intuiciones es correcta? ¿La subclase como se describió anteriormente es un antipatrón?
- Si es un antipatrón, ¿cómo se llama?
Pido disculpas si esto resultó ser una respuesta fácil de googleable; mis búsquedas en google en su mayoría arrojaron información sobre el antipatrón del constructor telescópico y no realmente lo que estaba buscando.