Если вы собираетесь использовать LineReceiver
, вам не следует переопределять dataReceived
. Вместо этого переопределите lineReceived
. Если ваш протокол не ориентирован на строки, вы, вероятно, не хотите использовать LineReceiver
. Также вы можете рассмотреть возможность использования интерфейса Tubes в любом случае.
Должен ли я просто определить все 20 из этих функций в этом же классе «MessageListener», или я пишу отдельный класс для хранения всех этих функций?
Вероятно, вы должны поместить их в другой класс. Если вы поместите их в MessageListener
, то у вас будет больше трудностей с тестированием, рефакторингом и обслуживанием кода, потому что ваш протокол logi c тесно связан с журналом вашего приложения c.
Определите явный интерфейс MessageListener
использует для отправки событий высокого уровня, представляющих сетевые действия. Затем реализуйте этот интерфейс в соответствии с вашим конкретным приложением. Позже вы можете реализовать его по-другому для другого приложения. Или вы можете написать тест двойников. Или вы можете изменить свой протокол, не меняя логи приложения c. Разделение двух частей дает вам большую гибкость по сравнению с объединением их обоих в один класс.
Я мог бы получить 10 сообщений примерно в одно и то же время, и им, возможно, потребуется вызвать одну и ту же функцию, поэтому Я не был уверен, что лучший архитектурный подход здесь.
Я думаю, что это ортогонально, но если это достаточно важная часть вашего протокола или логики приложения c, вы можете подумать о создании какого-то вида векторизации в явный интерфейс, который я упоминал выше. Вместо appObj.doOneThing(oneThing)
возможно, у вас есть appObj.doSeveralThings([oneThing, anotherThing])
.
Я также хочу создать GUI для взаимодействия с сервером для устранения неполадок и мониторинга при необходимости. Я знаком с Tkinter, и это было бы хорошо для этого, и я могу написать GUI в отдельном файле и также подключить его к серверу через сокет. Но буду ли я использовать тот же прослушиватель сокетов, реализованный выше, и просто передавать ему похожие сообщения? Или я должен создать отдельный класс и фабрику для прослушивания соединений GUI?
Это зависит от взаимодействий, которые вы хотите выполнить, я полагаю. Если это GUI с дополнительными привилегиями по сравнению с обычным клиентом, вам нужен протокол и сервер с функциями аутентификации и авторизации или вы не должны использовать один и тот же сервер и протокол, поскольку вы рискуете предоставить клиентам эти дополнительные привилегии.
Если вы просто хотите смоделировать реального клиента с помощью своего рода дружественного к отладке интерфейса, который позволяет вам легко взаимодействовать с сервером способами, которые клиент обычно взаимодействует с ним, но с интерфейсом, который делает это проще для вас, вы может (и предположительно должен) подключиться к тому же серверу.