2016-05-05 4 views
0

Manchmal beginnen Anwendungen mit dem Ausgeben von lesbaren Strings (zum Beispiel Log-Nachrichten) und später bestimmen wir, dass wir diese Strings programmatisch verarbeiten wollen, indem wir zum Beispiel bestimmte Strings in einer Richtung darstellen oder andere Strings zoomen eine Anzahl von Vorkommen.Was sind gute Lösungen für die Zuordnung eines Bezeichners zu einer Nachricht?

Um dies zu tun, muss der Code, der diese Strings verarbeitet, eine Idee haben, was jeder String "bedeutet", so dass er entsprechend klassifiziert und behandelt werden kann ... meine Frage ist, wie man das am besten macht? Natürlich möchten Sie nicht, dass Ihr Code Zeichenfolgenvergleiche mit dem Text jeder Nachricht durchführt. Das ist peinlich und zerbrechlich.

Einige Lösungen, die ich gesehen habe, beinhalten die Präfixierung der Zeichenfolge mit einer Nachrichtenkennung wie M123, so dass Ihr Verarbeitungscode diese Kennung lesen und daraus bestimmen kann, wie die Zeichenfolge verarbeitet wird. Dies scheint auch weniger als wünschenswert, weil Sie die Nachrichtenkennungen, die bereits verwendet wurden, usw. verfolgen müssen.

Beispiel: Sie haben eine App, die eine Reihe von Robotern startet und alle möglichen Befehle an sie abgibt Lass sie initialisieren und die gewünschten Aufgaben erledigen. Zunächst werden die verschiedenen Teile Ihrer Anwendung, die mit den Robotern interagieren Ausgabe von Textnachrichten bis zu einem gewissen Ausgang (vielleicht ein Protokoll), wie folgt aus:

Roboter 1 Start Initialisierung Roboter 1 für SSH warten antworten Roboter 2 Start Initialisierung Roboter 4 Initialisierung abgeschlossen Robot 3 nicht innerhalb Timeout antworten Roboter 1 heruntergefahren wird ...

nach einer Weile merkt man, dass zusätzlich zu dem Text Scrollen Protokoll, dann würden Sie grafisch gerne eine Art von Darstellung zeigen von jeder Roboter, vielleicht ein Fenster mit einem Kontrollkästchen für jeden wichtigen Meilenstein, der in seiner Lebenszeit passieren kann . Dies wäre eine nützlichere alternative Benutzeroberfläche.

Zum Beispiel möchten Sie ein Kontrollkästchen anzeigen, wenn ein Roboter erfolgreich gestartet wurde und wenn er seine Aufgabe erfolgreich abgeschlossen hat und so weiter.

Die Frage wird, wie soll diese neue "Ansicht" die aktuellen Nachrichten interpretieren, die von Ihrer App ausgegeben werden, damit sie weiß, was sie "bedeuten" und verarbeiten kann? Wenn die Ansicht beispielsweise einen Indikator für einen Roboter anzeigen soll, der die Initialisierung abgeschlossen hat, sollte er einen Zeichenfolgenvergleich mit den Protokollmeldungen durchführen, die nach dem Text "Robot N initialization complete" suchen? Das scheint zerbrechlich zu sein, da Sie den Text der Log-Nachricht eines Tages verändern könnten.

Eine Option könnte darin bestehen, die Ausgabe jeder Protokollnachricht mit einer eindeutigen, sich nicht ändernden Nachrichtenkennung voranzuzählen, z. B. "M24 Robot 1 hat Initialisierung abgeschlossen". So sieht die neue Ansicht den M24 aus und weiß, dass das für eine "Initialisierung abgeschlossen" steht.

+0

Das ist ziemlich vage und abstrakt. können Sie uns zeigen ein konkretes Beispiel dafür, was Sie 'rede über? –

+0

[KeyValuePair] (https://msdn.microsoft.com/en-us/library/5tbh8a42%28v=vs.110%29.aspx) –

+0

Ausgehen auf einem lim b hier ... versuchen Sie eine Nummer (Fehlercode) mit protokollierten Nachrichten zu verknüpfen?Mit dem Ziel eindeutiger Fehlercodes aber auch statischer Werte, die sich zwischen Kompilationen nicht ändern? – Anssssss

Antwort

1

in diesem Fall sehe ich eine einfache Klasse mit mit 2 Requisiten ... eine Zeichenfolge und eine andere Kennung und ich muss es im Speicher behalten ... "Zur Laufzeit Benutzer nur String-Eigenschaft, aber programmgesteuert ich werde auf Anzeige zugreifen versteckte Eigenschaft ... Um diese Klasse zu einfachen String reconduct, können Sie ToString methos außer Kraft setzen ...

zum Beispiel

public class Message 
{ 
    public void int MessageId {get; set;} 
    public void string UserMessage {get; set;} 

    public override string ToString() 
    { 
     return UserMessage; 
    } 
} 
+1

Das ist ziemlich nah an dem, was ich dachte. Ich kann mir keinen besseren Weg vorstellen, aber es fühlt sich weniger als ideal an. Ich dachte, unsere Branche hätte vielleicht ein besseres Muster für die Klassifizierung von String-Entitäten, um sie für Code leichter erkennbar zu machen. –

Verwandte Themen