Estoy desarrollando una aplicación que se usará para abrir y cerrar válvulas en un entorno industrial, y estaba pensando en algo simple como esto:
public static void ValveController
{
public static void OpenValve(string valveName)
{
// Implementation to open the valve
}
public static void CloseValve(string valveName)
{
// Implementation to close the valve
}
}
(La implementación escribiría unos pocos bytes de datos en el puerto serie para controlar la válvula: una "dirección" derivada del nombre de la válvula y un "1" o "0" para abrir o cerrar la válvula).
Otro desarrollador preguntó si deberíamos crear una clase separada para cada válvula física, de las cuales hay docenas. Estoy de acuerdo en que sería mejor escribir código en PlasmaValve.Open()lugar de ValveController.OpenValve("plasma"), pero ¿es excesivo?
Además, me preguntaba cuál sería la mejor manera de abordar el diseño teniendo en cuenta un par de requisitos hipotéticos futuros:
- Se nos pide que admitamos un nuevo tipo de válvula que requiere diferentes valores para abrirla y cerrarla (no 0 y 1).
- Se nos pide que apoyemos una válvula que se puede configurar en cualquier posición de 0 a 100, en lugar de simplemente "abrir" o "cerrar".
Normalmente usaría la herencia para este tipo de cosas, pero recientemente he empezado a entender la "composición sobre la herencia" y me pregunto si hay una solución más ingeniosa con la composición.