Sto sviluppando un'app che verrà utilizzata per aprire e chiudere le valvole in un ambiente industriale e stava pensando a qualcosa di semplice come questo: -
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
}
}
(L'implementazione dovrebbe scrivere alcuni byte di dati sulla porta seriale per controllare la valvola, un "indirizzo" derivato dal nome della valvola e un "1" o "0" per aprire o chiudere la valvola).
Un altro dev ha chiesto se dovremmo invece creare una classe separata per ogni valvola fisica, di cui ci sono dozzine. Sono d'accordo che sarebbe più bello scrivere codice come PlasmaValve.Open()
piuttosto che ValveController.OpenValve("plasma")
, ma questo è eccessivo?
Inoltre, mi stavo chiedendo come affrontare il design con un paio di ipotetici requisiti futuri in mente: -
- Ci viene chiesto di supportare un nuovo tipo di valvola che richiede valori diversi per aprirlo e chiuderlo (non 0 e 1).
- Ci viene chiesto di supportare una valvola che può essere impostata su qualsiasi posizione da 0 a 100, piuttosto che semplicemente "aperta" o "chiusa".
Normalmente userei l'ereditarietà per questo genere di cose, ma di recente ho iniziato a riflettere sulla "composizione sull'ereditarietà" e mi chiedo se ci sia una soluzione di slicker da usare con la composizione?