如果您正在編寫一個包含大量網絡流量的大程序,我最好在哪裏處理我的不同數據包?我的數據包包含一個連接到一個大枚舉的數據包ID。例如,數據包LOGIN_AUTH是數據包ID 23.在哪裏處理我的數據包?
我怎樣才能最好地分開處理這些數據包?
- 做一個巨大的switch語句,其中包含所有Packet ID的內容?
- 製作一個數據包類併爲每個數據包ID創建一個擴展類?
我在C#中編寫我的應用程序,但問題更一般。
如果您正在編寫一個包含大量網絡流量的大程序,我最好在哪裏處理我的不同數據包?我的數據包包含一個連接到一個大枚舉的數據包ID。例如,數據包LOGIN_AUTH是數據包ID 23.在哪裏處理我的數據包?
我怎樣才能最好地分開處理這些數據包?
我在C#中編寫我的應用程序,但問題更一般。
假設你的對象有一個定義封裝類型爲int,它使用簡單枚舉來命名這些整數和處理程序存儲在這樣的詞典:
public enum PackageType
{
LOGIN_AUTH = 23,
// More enum members here
}
class Package
{
public int Id { get; set; }
public PackageType Type { get { return (PackageType) Id; }}
}
class SomeClass
{
IDictionary<PackageType, Action<Type>> _dictionaryPacketHandlers = new Dictionary<PackageType, Action<Type>>()
{
{PackageType.LOGIN_AUTH, package => { /* Logic here */ }},
// More handlers here
};
}
現在你可以使用它像這樣:
public void SomeMethod(Package package)
{
_dictionaryPacketHandlers[package.Type](package);
}
他可能希望爲基於枚舉值的消息。有意義的是,只有一種類型包含簡單網絡請求的消息標識的屬性。 –
什麼是myPacket?我如何在IDictionary中插入新的數據包? – Basaa
@ByteBlast,你是對的 - 我修改了我的答案。巴薩,看到我修改後的答案。 – lightbricko
見http://stackoverflow.com/questions/1477471/design-pattern-for-handling-multiple-message-types –