Ich habe Protokolle, die ich versuche, ein Dienstprogramm zu analysieren, zu analysieren.Best Practice für die Strukturierung meines Typs
Diese Protokolle sind als CSVs strukturiert, aber die Anzahl der Abschnitte (Spalten) variiert je nach "Transaktionsart". Es gibt ungefähr 50 verschiedene Möglichkeiten des "Transaktionstyps", so dass eine Klasse für jeden nicht machbar ist.
Beispiel Log-Einträge:
2016-08-02 10:36:30.578 (Machine: 00124) Received: 1120228,T,2016-08-02 10:36:30,5,18441,209719,1,20
2016-08-02 10:36:30.594 (Machine: 00124) Sent: 1120228,T,2016-08-02 10:36:30,0,,0,18441,DhfMAAfjhsb6CiW55999999TbNakCC3Fc8jaZ
Jeder Received
hat eine passende Sent
. Die Werte und die dargestellten Parameter unterscheiden sich um Received
und Sent
sowie den Transaktionstyp.
Die Idee und aktuelle Implementierung ist wie folgt.
- Lastleitung und Split auf Komma (,)
- ermitteln „Transaktionsart“
- laden zugeordnet Schema aus einem XML und gewinnen die Parameter der Wert für jeden darstellt.
- Shop in einer Art je nachdem, ob es
Received
oderSent
Aktuelle Umsetzung:
public class Message : IMessage
{
private List<Received> _receivedMessage;
private List<Sent> _sentMessage;
public Message()
{
ReceivedMessage = new List<Received>();
SentMessage = new List<Sent>();
}
public Message(
string messageID,
List<Received> receivedMessage,
List<Sent> sentMessage,
string storedProcedure,
string transShortName)
{
MessageID = messageID;
ReceivedMessage = receivedMessage;
SentMessage = sentMessage;
StoredProcedure = storedProcedure;
TransShortName = transShortName;
}
public string MessageID { get; set; }
public List<Received> ReceivedMessage
{
get { return new List<Received>(_receivedMessage.OrderBy(_ => _.Position)); }
set { _receivedMessage = value; }
}
public List<Sent> SentMessage
{
get { return new List<Sent>(_sentMessage.OrderBy(_ => _.Position)); }
set { _sentMessage = value; }
}
public string StoredProcedure { get; set; }
public string TransShortName { get; set; }
public class Sent : ISent
{
public string MessageID { get; set; }
public dynamic Value { get; set; }
public string Parameter { get; set; }
public string Position { get; set; }
}
public class Received : IReceived
{
public string MessageID { get; set; }
public dynamic Value { get; set; }
public string Error { get; set; }
public string Parameter { get; set; }
public string Position { get; set; }
public string Regex { get; set; }
//public string TransShortName { get; set; }
}
}
isent Schnittstelle:
public interface ISent
{
string Parameter { get; set; }
string Position { get; set; }
dynamic Value { get; set; }
}
IReceived Schnittstelle:
public interface IReceived
{
string Error { get; set; }
string Parameter { get; set; }
string Position { get; set; }
string Regex { get; set; }
//string TransShortName { get; set; }
}
Idee, Best Practices, alles, sind gnädig willkommen!
Ich weiß, was in ihnen ist, indem Sie das analysierte XML-Transaktionsschema referenzieren und nach Transaktionstyp suchen. Ich habe im Grunde etwas ähnliches in meinem aktuellen Setup. Jede Zeile wird zu einer "Liste" oder "Liste ". –
@DevinStokes und ich würde diese Frage stellen, brauchen Sie wirklich diese beiden Arten ISent und IReceived? Sie könnten eine enum als Eigenschaft haben, um den Typ anzugeben, um die Antwort des SledgeHammer zu vervollständigen (in dem Sinne, dass nur eine Klasse das Ganze verwaltet). –
Ich denke, das würde funktionieren. Also, was Sie sagen, ist implementieren "ITransactionMessage" mit "Parameter" "Position" und "Wert"? –