Arbeiten an einem Projekt, das ein Protokoll der Ereignisse analysiert und dann ein Modell basierend auf den Eigenschaften dieser Ereignisse aktualisiert. Ich war ziemlich faul dabei, es "fertig zu machen" und mich mehr um die Voraboptimierung, den schlanken Code und die richtigen Entwurfsmuster zu kümmern. Meist ein selbstlernendes Experiment. Ich bin daran interessiert, welche Muster erfahrenere Designer für relevant halten oder welche Art von pseudo-codierter Objektarchitektur die beste, am leichtesten zu wartende und so weiter wäre.Entsprechendes Entwurfsmuster für einen Ereignisprotokollparser?
In einem einzelnen Protokoll können 500.000 Ereignisse auftreten. Es gibt ungefähr 60 Ereignistypen, die jeweils ungefähr 7 Basiseigenschaften gemeinsam haben und je nach Ereignistyp 0 bis 15 zusätzliche Eigenschaften haben. Der Ereignistyp ist die zweite Eigenschaft in der Protokolldatei in jeder Zeile.
Also habe ich einen wirklich hässlichen imperativen Parser versucht, der Zeile für Zeile durch das Protokoll läuft und dann Ereignisse Zeile für Zeile verarbeitet. Dann versuchte ich eine lexikalische Spezifikation, die ein "nextEvent" -Muster verwendet, das in einer Schleife aufgerufen und verarbeitet wird. Dann habe ich eine einfache alte "Parse" -Methode ausprobiert, die niemals zurückkehrt und nur Ereignisse zu registrierten Listener-Callbacks auslöst. Ich habe sowohl einen einzelnen Rückruf, unabhängig vom Ereignistyp, als auch eine für jeden Ereignistyp spezifische Rückrufmethode ausprobiert.
Ich habe versucht, eine Basis "Ereignis" -Klasse mit einer Union aller möglichen Eigenschaften. Ich habe versucht, den "neuen Ereignis" -Aufruf zu vermeiden (da es eine große Anzahl von Ereignissen geben kann und die Ereignisobjekte im Allgemeinen kurzlebig sind) und die Rückmeldemethoden pro Typ mit primitiven Eigenschaftsargumenten zu haben. Ich habe versucht, eine Unterklasse für jeden der 60 Ereignistypen mit einem abstrakten Event-Elternteil mit den 7 gemeinsamen Basiseigenschaften zu haben.
Ich habe vor kurzem versucht, das weiter zu nehmen und ein Befehlsmuster zu verwenden, um Ereignisbehandlungscode pro Ereignistyp zu setzen. Ich bin mir nicht sicher, ob ich das mag und es ist sehr ähnlich zu den Callbacks pro Typ Ansatz, nur Code ist innerhalb einer Ausführungsfunktion in den Typ-Unterklassen gegenüber den Callback-Methoden pro Typ.
Das Problem ist, dass viele der Modell-Update-Logik geteilt wird, und viel davon ist spezifisch für die Unterklasse, und ich bin gerade erst verwirrt über die ganze Sache. Ich hoffe, dass jemand mich wenigstens in eine Richtung weisen kann!
Nun, ich bin mir ziemlich sicher, dass ich bei den Grundeigenschaften als Ereigniseigenschaften bleiben möchte, da sie bekannt und konstant sind und mir die Leistung sehr wichtig ist. Ich möchte einen Bericht der zusammengefassten Informationen über Teile der Ereignisse generieren. Nach der Tat, aber ich will sequenziell (deterministisch?) Verarbeiten. – Josh