Ich hatte eine Diskussion mit einem Kollegen, und es kam zu widersprüchlichen Vorstellungen über den Zweck der Unterklassenbildung. Meine Intuition ist, dass wenn eine primäre Funktion einer Unterklasse darin besteht, einen begrenzten Bereich möglicher Werte ihrer Eltern auszudrücken, es wahrscheinlich keine Unterklasse sein sollte. Er argumentierte für die gegenteilige Intuition: Die Unterklasse repräsentiert das "spezifischere" Objekt, weshalb eine Unterklassenbeziehung angemessener ist.
Um meine Intuition konkreter zu machen, denke ich, dass wenn ich eine Unterklasse habe, die eine Elternklasse erweitert, aber der einzige Code, den die Unterklasse überschreibt, ein Konstruktor ist (ja, ich weiß, dass Konstruktoren im Allgemeinen nicht "überschreiben", dann halte ich mit) Was wirklich gebraucht wurde, war eine Hilfsmethode.
Betrachten Sie zum Beispiel diese etwas realistische Klasse:
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;
}
}
Sein Anspruch ist, dass es völlig angemessen wäre, eine Unterklasse wie diese zu haben:
public class SystemDataHelperBuilder
{
public SystemDataHelperBuilder()
: base(Configuration.GetSystemDatabaseEngine(),
Configuration.GetSystemConnectionString())
{
}
}
Also die Frage:
- Welche dieser Intuitionen sind bei Menschen, die über Designmuster sprechen, richtig? Ist die oben beschriebene Unterklasse ein Anti-Pattern?
- Wenn es sich um ein Anti-Pattern handelt, wie heißt es?
Ich entschuldige mich, wenn sich herausstellt, dass dies eine leicht googleable Antwort war; Meine Suchanfragen bei Google ergaben meistens Informationen über das Anti-Pattern des Teleskopkonstruktors und nicht wirklich das, wonach ich suchte.