サーバー クライアント アプリ、サーバー側でクライアント データを処理するクリーンな方法を考えるのに苦労しています

StackOverflow https://stackoverflow.com/questions/4414655

質問

Linux 上で C++ で書かれたサーバー クライアント アプリがあります。クライアントがサーバーに接続すると、サーバーはクライアントが実行するサーバー コマンドを送信するのを待つスレッドを生成します。コマンドは OS に依存します。クライアントがサーバーと通信しているスレッドは、クライアントが必要とする必要なコマンドを実行するグ​​ローバル関数を呼び出します。したがって、クライアントが実行するサーバーに送信する OS 依存のコマンドごとに 2 つの関数が必要です。これらのグローバル関数はすべて、メイン スレッド関数と同じヘッダーで定義されます。さまざまな OS でこれらの機能をすべて使用すると、少し面倒になってきます。私のアイデアは、クラスが設計された OS に必要なコマンドを実行する静的メンバー関数を持つ WindowsFuncs と LinuxFuncs という 2 つのクラスを作成することです。ロジックをクリーンにする方法に関する stackoverflow のアイデアにはどのようなものがありますか?

役に立ちましたか?

解決

これはスレッドの問題ではないようです。単純な継承が使えるようです。

次のようなものを使用して

abstract class OSMethods {
  void listDir();
}

class OSMethodsLinux : OSMethods {
  void listDir() { system.exec("ls"); }
} 
class OSMethodsWin : OSMethods {
  void listDir() { system.exec("dir"); }
}

次に、サーバークライアントの処理コードには次のようなメソッドがあります

  void accept(Socket s, OSMethods m) {
     s.readCommand();
     m.listDir();  // or whatever
  }

Linux または Win クラスを受け入れるために正しいインスタンスを渡していることを確認してください。したがって、静的メソッドはありません。

一般的に、賢いことをしない限り、プログラムに静的メソッドは必要ないことがわかりました (メインを除く)。ほとんどの場合、静的メソッドは必要なく、設計の柔軟性が低くなります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top