Как определить тип данных сокета? - PullRequest
0 голосов
/ 06 июня 2010

Может быть, я не смог правильно выразить свои сомнения в этом вопросе, но все же я постараюсь. В основном я создал простую программу чата на основе сокетов, и все работает отлично. Но я думаю, что я сделал много патчей с точки зрения дизайна.

Я использовал ObjectInputStream и ObjectOutputStreams в моей программе. Вопрос, который я хочу задать, состоит в том, как определить различные типы данных, которые я отправляю по сети? скажем, если это простой объект типа String, я напрямую добавлю к List<String> chatMessages. Теперь, если хотите запретить определенных пользователей, я создал другой класс: -

public class User{
    private String name;
    private String id;
    //getters and setters
}

Этот класс User не имеет для меня значения до сих пор, но я создал его только для правильного определения действия . Таким образом, если я получу instanceOf пользователя, я могу быть уверен, что какой-то пользователь будет забанен. Таким образом, мне не нужно жестко кодировать строки. Я имею в виду, что сначала я думал об отправке чего-то вроде "Banned User :" + userName, а затем я проверял, начинается ли строка с «Banned User:», затем я предпринимаю некоторые действия: с. Я создал класс User, но это не имеет значения для меня в моей программе.

Я хочу знать, является ли прямая отправка строк хорошим способом или создать класс для каждого хорошего действия. Если я не уверен, пожалуйста, дайте мне знать. Если у меня есть сотни действий, я должен создать сотни классов, чтобы я мог проверить через instanceOf? Скажите сейчас, если я планирую создать объект, похожий на BUZZ, который доступен в Yahoo Messenger. Должен ли я снова создать еще один класс с именем BUZZ? так это легко определить?

1 Ответ

2 голосов
/ 06 июня 2010

Почему бы не отправить Action объекты по проводам? Затем вы можете создать подкласс этих Action объектов (скажем):

  1. BanUserAction
  2. RecordChat
  3. AddUser

и т.д.. и каждый экземпляр объекта содержит требуемые данные, например, BanUser содержит имя пользователя, которого нужно заблокировать.

Вам не нужно будет использовать instanceof, поскольку каждый объект будет реализовывать общий метод .act(). Затем вы можете вызвать этот метод, и вам не нужно будет заботиться , какой объект был передан вам, так как сам объект позаботится о том, что делать (это основной принцип ОО-программирования - указывать объектам делать что-то для вас ).

Обратите внимание, что для метода act() может потребоваться передать в него некоторый контекст, например ссылка на содержащийся чат-сервис.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...