/ / Protokollentwurf in C ++, zyklische Klassenmitgliedschaft - C ++, Entwurfsmuster

Protokollentwurf in C ++, zyklische Klassenzugehörigkeit - C ++, Design-Patterns

Ich versuche, eine Kommunikation zu entwerfenProtokoll in C ++ und möchten die verschiedenen Schichten des Protokolls abstrahieren, damit sie bei Bedarf in der Zukunft geändert werden können, ohne die gesamte App ändern zu müssen.

Bisher habe ich Folgendes entworfen:

  1. Anwendung --- zB Klima-> SetTemperatur (70);
  2. Modul (zB Klima) --- zB. Protokoll-> SetRegister (23, 70);
  3. Protokollschicht --- z. msg [] = {0x4C, 0x55, 0x17, 0x46}; comm-> SendPacket (msg);
  4. Kommunikationsschicht

Das Problem tritt auf dem Rückweg auf:

  1. Kommunikationsschicht
  2. Protokollschicht
  3. Modul
  4. Anwendung

Ich will die Bewerbung nicht wirklich ständigBitten des Moduls nach Daten, und dann des Moduls, das das Protokoll abruft, und das Protokoll, das die Kommunikationsschicht abfragt, aber Rückrufe in jeder Klasse scheinen die Daten zu "sprudeln". Im Allgemeinen weiß jedoch nur die Kommunikationsschicht, ob Daten weiter verarbeitet werden sollten (durch die Protokollschicht usw.).

Gibt es ein besseres Designmuster?

Antworten:

1 für die Antwort № 1

Es besteht die Möglichkeit, dass Sie keine synchrone Kommunikation durchführen. Sie können also nicht warten, bis die Communication Layer die Antwort hat.

Was wir also haben, ist Anwendung-> Modul-> Protokoll-> Kommunikation. Das alles für die Sendeseite (abgesehen von etwaigen erneuten Versuchen usw. aus den verschiedenen Schichten).

Sie sagen nicht, wie die Daten tatsächlich erfasst werden,Es ist möglich, dass die Kommunikationsebene keine Daten kennt, bis Sie sie darüber informieren, während sich das Nachrichten- / Ereignissystem in der App befindet. Sie müssen es also trotzdem aufrufen, und es scheint falsch zu sein, dass die App sowohl über die Module als auch über alle Kommunikationsschichten Bescheid weiß.

Übergeben Sie also die gesammelten Daten an die Module und lassen SieWenn die Daten von Bedeutung sind, werden sie schließlich die oberste Ebene erreichen. Die Anwendung sollte Ereignisse aus den Modulen "abonnieren", um die erforderlichen Daten zu erhalten (Ereignisse und Beobachter). Zwischen den Schichten sind keine Abonnements erforderlich von der Kommunikation, wie Sie sie anrufen, um ihnen die Arbeit trotzdem zu geben, so dass sie das Ergebnis der Verarbeitung einfach zurückgeben können.