fundo
Eu tenho um projeto que depende do uso de um determinado tipo de dispositivo de hardware, embora realmente não importe quem faz esse dispositivo de hardware desde que faça o que eu preciso. Com isso dito, mesmo dois dispositivos que devem fazer a mesma coisa terão diferenças quando não forem fabricados pelo mesmo fabricante. Então, estou pensando em usar uma interface para desacoplar o aplicativo da marca / modelo específico do dispositivo envolvido e, em vez disso, fazer com que a interface cubra apenas a funcionalidade de nível mais alto. Aqui está o que eu acho que minha arquitetura será:
- Defina uma interface em um projeto C #
IDevice
. - Tenha um concreto em uma biblioteca definida em outro projeto C #, que será usado para representar o dispositivo.
- Faça com que o dispositivo concreto implemente a
IDevice
interface. - A
IDevice
interface pode ter métodos comoGetMeasurement
ouSetRange
. - Faça com que o aplicativo tenha conhecimento sobre o concreto e passe o concreto para o código do aplicativo que utiliza ( não implementa ) o
IDevice
dispositivo.
Tenho certeza de que esse é o caminho certo a seguir, porque poderei alterar qual dispositivo está sendo usado sem afetar o aplicativo (o que parece acontecer algumas vezes). Em outras palavras, não importa como as implementações GetMeasurement
ou SetRange
realmente funcionem no concreto (pois podem diferir entre os fabricantes do dispositivo).
A única dúvida em minha mente é que agora tanto o aplicativo quanto a classe concreta do dispositivo dependem da biblioteca que contém a IDevice
interface. Mas isso é uma coisa ruim?
Também não vejo como o aplicativo não precisará saber sobre o dispositivo, a menos que ele IDevice
esteja no mesmo espaço para nome.
Questão
Parece a abordagem correta para implementar uma interface para dissociar a dependência entre meu aplicativo e o dispositivo que ele usa?