Sfondo
Ho un progetto che dipende dall'uso di un certo tipo di dispositivo hardware, mentre non importa chi fa quel dispositivo hardware finché fa quello che mi serve. Detto questo, anche due dispositivi che dovrebbero fare la stessa cosa avranno differenze quando non sono realizzati dallo stesso produttore. Quindi sto pensando di usare un'interfaccia per disaccoppiare l'applicazione dal particolare make / model del dispositivo in questione, e invece l'interfaccia copre solo la funzionalità di livello più alto. Ecco a cosa sto pensando la mia architettura sarà:
- Definisci un'interfaccia in un progetto C #
IDevice
. - Avere un concreto in una libreria definita in un altro progetto C #, che verrà utilizzato per rappresentare il dispositivo.
- Chiedi al dispositivo concreto di implementare l'interfaccia
IDevice
. - L'interfaccia
IDevice
potrebbe avere metodi comeGetMeasurement
oSetRange
. - Fai in modo che l'applicazione conosca il calcestruzzo e passa il calcestruzzo al codice dell'applicazione che utilizza ( non implementa ) il dispositivo
IDevice
.
Sono abbastanza sicuro che questo sia il modo giusto per farlo, perché poi potrò cambiare il dispositivo utilizzato senza influire sull'applicazione (che a volte sembra succedere). In altre parole, non importa come le implementazioni di GetMeasurement
o SetRange
funzionino effettivamente attraverso il calcestruzzo (come possono differire tra i produttori del dispositivo).
L'unico dubbio nella mia mente è che sia l'applicazione sia la classe concreta del dispositivo dipendono entrambi dalla libreria che contiene l'interfaccia IDevice
. Ma è una brutta cosa?
Inoltre, non vedo come l'applicazione non debba conoscere il dispositivo, a meno che il dispositivo e IDevice
si trovino nello stesso spazio dei nomi.
Domanda
Questo sembra l'approccio giusto per implementare un'interfaccia per disaccoppiare la dipendenza tra la mia applicazione e il dispositivo che usa?