Probabilmente si tratta di una domanda abbastanza semplice, ma per prima cosa ha bisogno di un po 'di background ... Sto modellando vari switch hardware, che possono essere attivati e disattivati. Gli switch sono configurabili, consentendo a un utente di specificare i valori numerici che vengono inviati all'hardware per segnalare che dovrebbe accendersi o spegnersi. Questa è la classe Switch
: -
public class Switch
{
public Id { get; set; }
public SwitchConfig Config { get; set; }
public void TurnOn()
{
WriteToSerialPort(Id, Config.OnValue);
}
public void TurnOff()
{
WriteToSerialPort(Id, Config.OffValue);
}
}
public class SwitchConfig
{
public int OnValue { get; set; }
public int OffValue { get; set; }
}
Fin qui tutto bene.
Ora devo modellare un nuovo tipo di interruttore che non solo può essere attivato e disattivato, ma può anche avere una soglia di temperatura impostata, quindi sembra ragionevole ereditare dalla classe Switch
. La configurazione dovrà anche estendersi per includere temperature min / max consentite, ad esempio: -
public TemperatureSwitchConfig : SwitchConfig
{
public int MinTemperature { get; set; }
public int MaxTemperature { get; set; }
}
La classe switch specializzata sarà simile a questa: -
public TemperatureSwitch : Switch
{
public void SetTemperature(int temperature)
{
var temperatureSwitchConfig = Config as TemperatureSwitchConfig;
if (temperature < temperatureSwitchConfig.MinTemperature
|| temperature > temperatureSwitchConfig.MaxTemperature)
{
return;
}
WriteToSerialPort(Id, temperature);
}
}
Non sembra "giusto" dove devo castare la proprietà Config
. Sono certo che a questo deve esserci una soluzione OO di punta, ma penso che sia intervenuta la "paralisi dell'analisi" e non riesco a vedere il legno per gli alberi! O mi preoccupo per nulla - il cast è una soluzione accettabile in questo scenario?