![](/img/trans.png)
[英]Structuring models in a simple hierarchy in MVC, what's the best practice?
[英]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
以及事務類型而異。
這個想法和當前的實現如下。
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.