如果您正在编写一个包含大量网络流量的大程序,我最好在哪里处理我的不同数据包?我的数据包包含一个连接到一个大枚举的数据包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 –