1

如果您正在编写一个具有大量网络流量的大型程序,我在哪里可以最好地处理我的不同数据包?我的数据包包含一个连接到大枚举的数据包 ID。例如数据包 LOGIN_AUTH 是数据包 ID 23。

我怎样才能最好地分开处理这些数据包?

  • 用所有的数据包 ID 做一个巨大的 switch 语句?
  • 创建一个 Packet 类并为每个 Packet ID 创建一个扩展类?

我正在用 C# 制作我的应用程序,但问题更笼统。

4

1 回答 1

2

假设您的对象有一个定义包类型的 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);
}
于 2013-10-23T19:21:28.640 回答