ログがあります解析するユーティリティをコーディングしようとしています。ベストプラクティスMy Typeの構造化のため
これらのログはCSVとして構成されていますが、セクション(列)の量は「トランザクションタイプ」によって異なります。 "Transaction Type"には約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
とトランザクションタイプによって異なります。
アイデアと現在の実装は次のとおりです。 COMMAに
- 負荷ラインとスプリット(、)
- 「トランザクションタイプ」
- 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と私はこの質問をするでしょう、あなたは本当にこれらの2つのタイプのISentとIReceivedが必要ですか? SledgeHammerの答えを完成させるための型を指定するプロパティとして列挙型を持つことができます(この意味では、1つのクラスは全体を管理するだけです)。 –
私はそれがうまくいくと思います。だからあなたが言っているのは、 "Parameter'' Position'と' Value'で "ITransactionMessage"と言う実装ですか? –