Antecedentes
Tengo un proyecto que depende del uso de cierto tipo de dispositivo de hardware, mientras que en realidad no importa quién haga ese dispositivo de hardware siempre que haga lo que necesito que haga. Dicho esto, incluso dos dispositivos que se supone que deben hacer lo mismo tendrán diferencias cuando no sean fabricados por el mismo fabricante. Por lo tanto, estoy pensando en usar una interfaz para desacoplar la aplicación de la marca / modelo particular del dispositivo involucrado y, en cambio, hacer que la interfaz cubra la funcionalidad de más alto nivel. Así es como creo que se verá mi arquitectura:
- Defina una interfaz en un proyecto de C #
IDevice. - Tenga un concreto en una biblioteca definida en otro proyecto de C #, que se usará para representar el dispositivo.
- Haga que el dispositivo concreto implemente la
IDeviceinterfaz. - La
IDeviceinterfaz puede tener métodos comoGetMeasurementoSetRange. - Haga que la aplicación tenga conocimiento sobre el concreto y pase el concreto al código de la aplicación que utiliza ( no implementa ) el
IDevicedispositivo.
Estoy bastante seguro de que esta es la forma correcta de hacerlo, porque así podré cambiar qué dispositivo se está utilizando sin afectar la aplicación (lo que parece suceder a veces). En otras palabras, no importará cómo las implementaciones GetMeasuremento SetRangerealmente funcionan a través del concreto (ya que pueden diferir entre los fabricantes del dispositivo).
La única duda en mi mente es que ahora tanto la aplicación como la clase concreta del dispositivo dependen de la biblioteca que contiene la IDeviceinterfaz. Pero, ¿es eso algo malo?
Tampoco veo cómo la aplicación no necesitará saber sobre el dispositivo, a menos que el dispositivo IDeviceesté en el mismo espacio de nombres.
Pregunta
¿Parece este el enfoque correcto para implementar una interfaz para desacoplar la dependencia entre mi aplicación y el dispositivo que utiliza?