1

大量のネットワーク トラフィックを伴う大きなプログラムを作成している場合、さまざまなパケットをどこで処理するのが最適でしょうか? 私のパケットには、大きな列挙型に接続されたパケット ID が含まれています。たとえば、パケット LOGIN_AUTH はパケット ID 23 です。

これらのパケットの処理を分離するにはどうすればよいですか?

  • そこにすべてのパケット ID を含む巨大な switch ステートメントを作成しますか?
  • パケット クラスを作成し、パケット 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 に答える