Sto sviluppando un'app che verrà utilizzata per aprire e chiudere le valvole in un ambiente industriale e pensavo 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 scriverà 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 sviluppatore ha chiesto se dovremmo invece creare una classe separata per ogni valvola fisica, di cui ce ne sono dozzine. Sono d'accordo che sarebbe meglio scrivere codice come PlasmaValve.Open()
piuttosto che ValveController.OpenValve("plasma")
, ma è eccessivo?
Inoltre, mi chiedevo come affrontare al meglio il progetto con in mente un paio di ipotetici requisiti futuri: -
- Ci viene chiesto di supportare un nuovo tipo di valvola che richiede valori diversi per aprirla e chiuderla (non 0 e 1).
- Ci viene chiesto di supportare una valvola che può essere impostata su qualsiasi posizione compresa tra 0 e 100, anziché semplicemente "aperta" o "chiusa".
Normalmente userei l'ereditarietà per questo tipo di cose, ma recentemente ho iniziato a concentrarmi sulla "composizione sull'ereditarietà" e mi chiedo se ci sia una soluzione più semplice da usare usando la composizione?