Серверное клиентское приложение, у меня проблемы с мышлением о чистом способе обработки данных клиента на стороне сервера

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

Вопрос

У меня есть серверное клиентское приложение, написанное на C ++ на Linux. Когда клиент подключается к моему серверу, сервер порождает резьбу, которая ждет клиента, чтобы отправить команды сервера для выполнения. Команды - зависимые ОС. Нить, которую клиент разговаривает с сервером включен, вызывает глобальные функции, которые выполняют необходимую команду, которую хочет клиент. Таким образом, я должен иметь две функции для каждой зависенной зависимости, клиент отправляет на сервер для выполнения. Все эти глобальные функции определены в одном и том же заголовок, что является основной функцией потока. Это немного грязно со всеми этими функциями для разных ОС. Моя идея состоит в том, чтобы написать два класса, которые называются WindowsFuncs и LinuxFuncs, которые имеют функции статических элементов, которые выполняют необходимую команду для этой ОС, предназначенный для. Каковы некоторые из идей Stackoverflows, как очистить свою логику?

Это было полезно?

Решение

Это не звучит как проблема резьбы. Похоже, вы можете использовать простое наследство.

Используя что-то вроде

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