2011-11-10 11 views
3

私は分散アプリケーション(サーバーとクライアント)を開発しています。サーバーから送信される指示がいくつかあります(例:InitCommandStartCommandStopCommand)。すべてのコマンドには独自の引数があります。さて、シリアライゼーションとネットワーキングに向かう場合、すべてのコマンドタイプ(サブクラス)をCommandから継承して作成するか、考えられるすべての引数をCommandクラスに入れるかどうかを尋ねます。サブクラス化または包括的なクラス

コマンドを処理するときは、if (command is InitCommand)if (command.Type == CommandType.Init)です。

最初の実装では、最初のオプションが使用されます。手で連載して、最初に型情報を入れています。ネットワークからデータ(byte[])を受け取ったら、最初に実際のタイプをチェックし(最初のkバイトだけデシリアライズします)、次にデシリアライズメソッドをいくつか使用します(例:Serializer.Deserialize<InitCommand>)。

2番目のオプションは、自動化されたシリアライゼーションを使用できるため、デシリアライズ前にタイプをチェックする必要がないため、使いやすくなっています。しかし、それは私を悩ますので、すべての議論を一つのクラスに入れなければならない。

他のアプローチについてはどう思いますか?

答えて

1

複数のメソッドで1つのクラスを持つ必要があるようですが、 Start,Init,Stop。これは1つのクラスのすべてをサポートします。 SqlCommandのコマンドタイプはTextStoredProcedureTableDirectで、異なるタイプのコマンドで再構築しようとしているようです。私は#2を選び、MicrosoftがSqlCommandCommandTypeとどのように実装したかを見ていきます。

関連する問題