Ho appena appreso un po 'di Composizione su Eredità. Mi stavo chiedendo se avrei dovuto applicare il concetto a qualcosa che ho scritto di recente.Abstract Base o Helper Class
Abbiamo precedenza aveva due classi che erano quasi identico, a parte un paio di piccole differenze. Contenevano alcune funzionalità di accesso al database di base, ma funzionavano su tipi di oggetti diversi (ma correlati). Così abbiamo in precedenza avuto classe che sono stati strutturati o meno così:
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) { ... }
}
ho preso la maggior parte dei metodi vicino-duplicato e refactoring fuori in una classe BaseToolDBHandler()
, ed ereditato dalle altre due, che fornisce alcuni metodi astratti e proprietà per gestire le differenze nell'accesso ai parametri del database stessi.
Sarebbe logico rendere la classe di supporto BaseToolDBHandler
invece contenuta all'interno degli accessor di database e fornire loro un'interfaccia comune le proprietà/metodi precedentemente astratti? O dovrei lasciarlo come caso di ereditarietà?
Sembra il posto perfetto per l'eredità per me, quindi lo lascerei in quel modo. –
Neil Kennendy ha ragione. Ma se il tuo BaseClass offre solo metodi e proprietà astratti e non offre mai alcuna funzionalità implementata, usa invece un'interfaccia (e.G. IDBHandler). –