Laden...

Gateway auf C# Basis

Erstellt von Hurricane_One vor 7 Jahren Letzter Beitrag vor 7 Jahren 1.843 Views
H
Hurricane_One Themenstarter:in
89 Beiträge seit 2015
vor 7 Jahren
Gateway auf C# Basis

Hallo Gemeinde,

ich stehe vor folgendem Problem.
Für ein kleines Projekt von mir muss ich über eine ComPort-Schnittstelle mehrere Peripherien ansprechen die softwaretechnisch das gleiche machen, aber eine andere "Adresse" besitzen die sie eindeutig voneinander unterscheidet.
Ich würde eine Art Gateway benötigen was meine Schnittstelle verwaltet,den Zugriff darauf managt und worüber ich Daten austauschen kann.
Gibt es dafür fertige Lösungen die ich jetzt beim schnellen suchen im Internet nicht finde, oder gibt es hier jemanden der so etwas bereits umgesetzt hat?

Ich habe mir noch ein paar Gedanken gemacht und folgendes UML Chart dazu "entworfen" (siehe Bild)

Ich würde halt eine Art Provider benötigen welchen ich anstatt meiner Schnittstelle aufrufe.
Sonst sieht es ja so aus (Beispielhaft):


COM = new ComPort("COM1");

Ich würde es mir so vorstellen:


COM = "GatewayProvider".GetGateway("COM1");

Hat jemand damit bereits Erfahrungen gemacht?

Gruß, Stephan

16.842 Beiträge seit 2008
vor 7 Jahren

Bitte keine externen Fotos verlinken. [Hinweis] Wie poste ich richtig? 6.1
Ich entferne diesen Beitrag sobald Du das korrigiert hast. Danke.

H
Hurricane_One Themenstarter:in
89 Beiträge seit 2015
vor 7 Jahren

Dazu müsste ich das Bild von 2,6MB auf 256 KB ändern, aber gut...
Tu ich dann gleich 😃

W
872 Beiträge seit 2005
vor 7 Jahren

Was ist der Unterschied zum Proxy Pattern?

H
Hurricane_One Themenstarter:in
89 Beiträge seit 2015
vor 7 Jahren

Entschuldigt bitte das ich mich jetzt erst melde, aber ich hatte seit meinem letzten Beitrag keine Zeit mich damit zu beschäftigen und komme erst jetzt wieder dazu.

@ Abt: Ich wechsle das Bild noch, versprochen!

@ Weismat: Es ist zum Teil ein Proxy Pattern. Aber auch Bright Pattern würde passen.

Heute früh war ich nicht untätig und habe mir folgendes gedacht:

Ich habe ja beliebig viele Softwaremodule die sich bis auf wenige Config's nicht voneinander unterscheiden. Jedes Modul bekommt auch eine Klasse "Gateway", wo die serielle Schnittstelle hinterlegt ist, das AnfrageArray für meine Peripherie sowie eine Queue wo ich die Daten hinterlege sollte die Schnittstelle besetzt sein von einem anderen Modul. (Queue deswegen -> Threadsicherheit)

Hinzukommt eine statische Klasse welche die Gateways verwaltet und den Modulen ihr Gateway zuweist. Dieses Objekt prüft ob der ComPort benutzbar ist.

In Code habe ich mir das ungefähr so vorgestellt:
Gateway:


public class Gateway
{
   public SerialPort ComPort;
   public Gateway()
   {
    //ComPort Eigenschaften
    // AnfrageArray
    // Zyklus senden
    ComPort. GatewayProvider.GetGateway("COM1"); //Zugriff auf ComPort erfolgt in     GatewayProvider
   }
}

GatewayProvider:


public static class GatewayProvider
{
   public static SerialPort GetGateway(string Input)
   {
    return ...?
   }      
}

Und jetzt kommt die Frage... Die Methode GetGateway müsste mir eigentlich die existierende Instanz von "Gateway" zurückgeben...
Wie realisiere ich das?

16.842 Beiträge seit 2008
vor 7 Jahren

Factory Pattern oder über einen entsprechenden DI Container via RegisterInstance.

Es ist nicht unüblich, dass mehrere Pattern ein Problem lösen können.
Sollte der Realisierung aber nicht im Wege stehen.

H
Hurricane_One Themenstarter:in
89 Beiträge seit 2015
vor 7 Jahren

Factory Pattern oder über einen entsprechenden DI Container via RegisterInstance.

Davon habe ich ehrlich gesagt noch nie etwas gehört 🙁

Findet man heraus, was man mit SerialPort alles zurückgeben kann. Rückgabetypen die möglich sind?
Also diesen Teil:


public static SerialPort GetGateway(string Input)
   {
    return ...?
   }