Acabo de aprender hoy un poco sobre Composición sobre herencia. Me preguntaba si debería aplicar el concepto a algo que escribí recientemente.Base abstracta o clase auxiliar
Nos previamente tenían dos clases que eran casi idénticos, aparte de un par de pequeñas diferencias. Contenían algunas características básicas de acceso a la base de datos, pero operaban en diferentes tipos de objetos (pero relacionados). Así que antes teníamos clase que se estructuraron algo como esto:
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) { ... }
}
Tomé la mayoría de los métodos de cerca duplicado y los refactorizado a cabo en una clase BaseToolDBHandler()
, y heredó de los otros dos, que proporciona unos métodos abstractos y propiedades para manejar las diferencias en el acceso a los parámetros de la base de datos.
¿Tendría sentido hacer que la BaseToolDBHandler
sea una clase auxiliar en su lugar, contenida dentro de los accesadores de la base de datos, y proporcionarles una interfaz común a las propiedades/métodos previamente abstractas? ¿O debería dejarlo como un caso de herencia?
Parece el lugar perfecto para la herencia, así que lo dejaría así. –
Neil Kennendy tiene razón. Pero si su BaseClass solo ofrece métodos y propiedades abstractas y nunca ofrece ninguna funcionalidad implementada, use una interfaz (por ejemplo, 'IDBHandler'). –