Bir iş arkadaşınızla bir tartışma yapıyordum ve alt sınıflamanın amacı hakkında çelişkili sezgiler yaşadık. Sezgim, eğer bir alt sınıfın birincil işlevi, üst öğesinin sınırlı bir değer değer aralığını ifade etmesiyse, o zaman muhtemelen bir alt sınıf olmamalıdır. Ters sezgi için savundu: alt sınıflamanın bir nesnenin daha "spesifik" olduğunu gösterir ve bu nedenle bir alt sınıf ilişkisi daha uygundur.
Sezgilerimi daha somut bir şekilde ifade etmek gerekirse, bir üst sınıfı genişleten bir alt sınıfa sahipsem ancak alt sınıfı geçersiz kılan tek kodun bir kurucu olduğunu düşünüyorum (evet, kurucuların genellikle "geçersiz kılma" etmediğini, o zaman benimle) gerçekte ihtiyaç duyulan şey yardımcı bir yöntemdi.
Örneğin, bu biraz gerçek hayat sınıfını düşünün:
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;
}
}
Onun iddiası şunun gibi bir alt sınıfa sahip olmanın tamamen uygun olacağını söyledi:
public class SystemDataHelperBuilder
{
public SystemDataHelperBuilder()
: base(Configuration.GetSystemDatabaseEngine(),
Configuration.GetSystemConnectionString())
{
}
}
Öyleyse, soru:
- Tasarım kalıplarından bahseden insanlar arasında bu sezgilerden hangisi doğrudur? Alt sınıflama yukarıda açıklandığı gibi bir anti-patern midir?
- Bir anti-patern ise, adı nedir?
Kolayca googleable bir cevap olduğu ortaya çıkarsa özür dilerim; google’da yaptığım aramalar çoğunlukla aradıklarım değil teleskop kurucu anti-patern hakkında bilgi verdi.