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
IDevice
interfaz. - La
IDevice
interfaz puede tener métodos comoGetMeasurement
oSetRange
. - 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
IDevice
dispositivo.
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 GetMeasurement
o SetRange
realmente 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 IDevice
interfaz. Pero, ¿es eso algo malo?
Tampoco veo cómo la aplicación no necesitará saber sobre el dispositivo, a menos que el dispositivo IDevice
esté 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?