Właśnie dzisiaj dowiedziałem się trochę o Kompozycji na dziedziczenie. Zastanawiałem się, czy powinienem zastosować tę koncepcję do czegoś, co napisałem niedawno.Klasa abstrakcyjna lub pomocnik Klasa
Mamy wcześniej miał dwie klasy, które były prawie identyczne, poza kilkoma małymi różnicami. Zawierały one kilka podstawowych funkcji dostępu do baz danych, ale działały na różnych (ale powiązanych) typach obiektów. Więc wcześniej miał klasę, które zostały zorganizowany mniej więcej tak:
class BallMillDBHandler{
public BallMillDBHandler(){ ... }
public void InsertTool(BallMill tool) { ... }
public BallMill QueryTool(string toolID) { ... }
public void UpdateTool(BallMill tool) { ... }
public void DeleteTool(string toolID) { ... }
}
class DiamondToolDBHandler{
public DiamondToolDBHandler(){ ... }
public void InsertTool(DiamondTool tool) { ... }
public DiamondTool QueryTool(string toolID) { ... }
public void UpdateTool(DiamondTool tool) { ... }
public void DeleteTool(string toolID) { ... }
}
wziąłem większość metod zbliżonych powielany i refactored je do klasy BaseToolDBHandler()
i odziedziczył go od dwóch pozostałych, zapewniając kilka abstrakcyjnych metod i właściwości do obsługi różnic w dostępie do samych parametrów bazy danych.
Czy ma to sens, aby zamiast tego uczynić z BaseToolDBHandler
klasę pomocniczą, zawartą w akcesoriach do baz danych i udostępnić im wspólny interfejs poprzednio abstrakcyjnych właściwości/metod? Czy powinienem zostawić to jako przypadek dziedziczenia?
To brzmi jak idealne miejsce do dziedziczenia dla mnie, więc zostawiłbym to w ten sposób. –
Neil Kennendy ma rację. Ale jeśli Twoja BaseClass właśnie oferuje abstrakcyjne metody i właściwości i nigdy nie oferuje żadnej zaimplementowanej funkcjonalności, użyj zamiast tego interfejsu (np. IDBHandler '). –