私は分散アプリケーション(サーバーとクライアント)を開発しています。サーバーから送信される指示がいくつかあります(例:InitCommand
、StartCommand
、StopCommand
)。すべてのコマンドには独自の引数があります。さて、シリアライゼーションとネットワーキングに向かう場合、すべてのコマンドタイプ(サブクラス)をCommand
から継承して作成するか、考えられるすべての引数をCommand
クラスに入れるかどうかを尋ねます。サブクラス化または包括的なクラス
コマンドを処理するときは、if (command is InitCommand)
とif (command.Type == CommandType.Init)
です。
最初の実装では、最初のオプションが使用されます。手で連載して、最初に型情報を入れています。ネットワークからデータ(byte[]
)を受け取ったら、最初に実際のタイプをチェックし(最初のkバイトだけデシリアライズします)、次にデシリアライズメソッドをいくつか使用します(例:Serializer.Deserialize<InitCommand>
)。
2番目のオプションは、自動化されたシリアライゼーションを使用できるため、デシリアライズ前にタイプをチェックする必要がないため、使いやすくなっています。しかし、それは私を悩ますので、すべての議論を一つのクラスに入れなければならない。
他のアプローチについてはどう思いますか?