sfondo
Ho un progetto che dipende dall'uso di un certo tipo di dispositivo hardware, mentre non importa chi produce quel dispositivo hardware fintanto che fa ciò di cui ho bisogno. Detto questo, anche due dispositivi che dovrebbero fare la stessa cosa avranno delle differenze quando non sono realizzati dallo stesso produttore. Quindi sto pensando di utilizzare un'interfaccia per disaccoppiare l'applicazione dalla particolare marca / modello del dispositivo coinvolto, e invece l'interfaccia ha solo la funzionalità di massimo livello. Ecco come sto pensando che la mia architettura sarà simile:
- Definire 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'
IDevice
interfaccia. - L'
IDevice
interfaccia potrebbe avere metodi comeGetMeasurement
oSetRange
. - Fai in modo che l'applicazione abbia conoscenza del calcestruzzo e passa il calcestruzzo al codice dell'applicazione che utilizza ( non implementa ) il
IDevice
dispositivo.
Sono abbastanza sicuro che questo sia il modo giusto per farlo, perché poi sarò in grado di cambiare quale dispositivo viene utilizzato senza influire sull'applicazione (che sembra accadere a volte). In altre parole, non importa come le implementazioni GetMeasurement
o SetRange
effettivamente funzionano attraverso il calcestruzzo (poiché potrebbero differire tra i produttori del dispositivo).
L'unico dubbio nella mia mente è che ora sia l'applicazione, sia la classe concreta del dispositivo dipendono entrambe dalla libreria che contiene l' IDevice
interfaccia. Ma è una brutta cosa?
Inoltre non vedo come l'applicazione non avrà bisogno di conoscere il dispositivo, a meno che il dispositivo e non si IDevice
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 utilizza?