簡體   English   中英

構建我的類型的最佳實踐

[英]Best Practice For Structuring My Type

我有嘗試編寫實用程序進行解析的日志。

這些日志以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以及事務類型而異。

這個想法和當前的實現如下。

  1. 加載行並在COMMA上分割(,)
  2. 確定“交易類型”
  3. 從XML加載關聯的架構,並獲取每個值代表的參數。
  4. 存儲類型取決於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; }
    }

想法,最佳實踐,任何事物都將受到歡迎!

如果您不希望每種類型都有一個類,那么我建議在字典中將常規屬性作為常規屬性,將動態屬性作為鍵/值對。 在代碼的某些時候,您將必須知道類型中的哪些屬性。

另外,如果您擁有所有50種類型的架構,則可以使用XSD命令行工具從該架構生成C#類。 命名約定可能有點古怪:)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM