0
我有我正在嘗試編碼實用工具解析的日誌。構建我的類型的最佳實踐
這些日誌的結構爲CSV,但部分(列)的數量因「交易類型」而異。 「交易類型」大約有50種不同的可能性,所以爲每種類別制定一個類別是不可行的。
例日誌條目:
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
每個Received
具有匹配Sent
。這些值和代表的參數相差Received
和Sent
以及交易類型。
這個想法和現在的實現如下。
- 負載線和分割上逗號(,)
- 確定從XML「交易類型」
- 負載相關聯的模式和增益值表示爲每個參數。
- 存放在類型取決於它是否
Received
或Sent
實施現狀:
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接口:
public interface ISent
{
string Parameter { get; set; }
string Position { get; set; }
dynamic Value { get; set; }
}
IReceived接口:
public interface IReceived
{
string Error { get; set; }
string Parameter { get; set; }
string Position { get; set; }
string Regex { get; set; }
//string TransShortName { get; set; }
}
想法,最佳實踐,任何事情,都受到歡迎!
我知道它們是什麼,通過引用解析的XML事務模式並按事務類型查找。我現在的設置基本上有類似的東西。每一行分別成爲'List'或'List '。 –
@DevinStokes我會問這個問題,你真的需要這兩種類型的ISent和IReceived嗎?你可以有一個枚舉作爲一個屬性來指定類型來完成SledgeHammer的回答(在某種意義上只有一個類來管理整個)。 –
我想這會工作。那麼你說的是用'Parameter'' Position'和'Value'實現「ITransactionMessage」嗎? –