Sto riprogettando un sistema composto da un'unità di acquisizione dati e molti altri sensori (sensore di tensione, sensore angolare, sensore di pressione, ecc.).
Nel modello del dominio del software, esiste una classe Sensor
di base, da cui deriva ogni sensore concreto.
public abstract class Sensor
{
public virtual String Name { get; }
public virtual UnitOfMeasurement Unit { get; }
public virtual int SamplingRate { get; }
public virtual CalibrationModel Calibration { get; }
}
Ognuna di queste sottoclassi rappresenta un sensore fisico venduto dalla nostra azienda e ha un valore "hardcoded" per ogni proprietà. Ad esempio VoltageSensor
ha "Voltage" come Name, "UnitOfMeasurement.Volt" come Unit, "1000" come SamplingRate, ecc.
Il problema corrente che sto cercando di risolvere è questo:
Ogni volta che un nuovo hardware del sensore reale viene sviluppato e aggiunto al nostro portafoglio, dobbiamo eseguire il seguente "intervento chirurgico per fucili a pompa":
- Crea una nuova sottoclasse
Sensor
; - Esegui alcune modifiche sparse e secondarie sul resto del sistema (a causa di depenzioni, ecc.);
- Rilasciare un aggiornamento alla nostra base clienti.
Come ho capito, ogni sensore fisico (l'hardware) è un'unità concettuale, e come tale dovrebbe essere in grado di essere "collegato" a un sistema in esecuzione in modo che non debba essere ricompilato e ridistribuito. Poiché questo non è ciò che sta accadendo, mi chiedo come potrei ottenere questa "pluggability" e mantenere il comportamento polimorfico che sta funzionando bene finora (eccetto per ogni volta che dobbiamo cambiare il portfolio).
Esiste un progetto alternativo di "Configurazione sul polimorfismo" che potrei prendere?