Hintergrund
Ich habe ein Projekt, das von der Verwendung eines bestimmten Hardwaregerätetyps abhängt, während es nicht wirklich wichtig ist, wer dieses Hardwaregerät herstellt, solange es das tut, wofür ich es brauche. Abgesehen davon weisen sogar zwei Geräte, die dasselbe tun sollen, Unterschiede auf, wenn sie nicht vom selben Hersteller hergestellt werden. Daher denke ich daran, eine Schnittstelle zu verwenden, um die Anwendung von der jeweiligen Marke / dem jeweiligen Gerätemodell zu entkoppeln , und stattdessen die Schnittstelle nur die Funktionalität auf höchster Ebene abzudecken. Ich denke, meine Architektur wird folgendermaßen aussehen:
- Definieren Sie eine Schnittstelle in einem C # -Projekt
IDevice
. - Lassen Sie einen Beton in einer Bibliothek in einem anderen C # -Projekt definieren, der zur Darstellung des Geräts verwendet wird.
- Lassen Sie das konkrete Gerät die
IDevice
Schnittstelle implementieren . - Die
IDevice
Schnittstelle kann Methoden wieGetMeasurement
oder habenSetRange
. - Stellen Sie sicher, dass die Anwendung Kenntnisse über den Beton hat, und übergeben Sie den Beton an den Anwendungscode, der das Gerät verwendet ( nicht implementiert )
IDevice
.
Ich bin mir ziemlich sicher, dass dies der richtige Weg ist, denn dann kann ich ändern, welches Gerät verwendet wird, ohne die Anwendung zu beeinträchtigen (was manchmal zu passieren scheint). Mit anderen Worten, es spielt keine Rolle, wie die Implementierungen des Betons funktionieren GetMeasurement
oder SetRange
tatsächlich funktionieren (wie es bei den Herstellern des Geräts unterschiedlich sein kann).
Der einzige Zweifel in meinem Kopf ist, dass jetzt sowohl die Anwendung als auch die konkrete Klasse des Geräts von der Bibliothek abhängen, die die IDevice
Schnittstelle enthält . Aber ist das eine schlechte Sache?
Ich sehe auch nicht, wie die Anwendung nichts über das Gerät wissen muss, es sei denn, das Gerät IDevice
befindet sich im selben Namespace.
Frage
Scheint dies der richtige Ansatz für die Implementierung einer Schnittstelle zu sein, um die Abhängigkeit zwischen meiner Anwendung und dem verwendeten Gerät zu entkoppeln?