170 похожих чатов

Как можно архитектурно зарефакторить такой код? switch incomeEvent.Action { case models.CALL:

switch incomeEvent.Method {
case models.GET:
getRequestHandler(incomeEvent)
case models.POST:
postRequestHandler(incomeEvent)
}
case models.SUBSCRIBE:
switch incomeEvent.Method {
case models.POST:
postSubscribeHandler(incomeEvent)
}
}
P.S. Внутри этих методов еще switch.
Полиморфизм? Регистрация колбеков? Мб еще варианты есть? В golang новичок. Такая вложенность, еще и раскиданная по файлам мне не нравится

2 ответов

14 просмотров

выглядит как шаблон observer https://gist.github.com/sayden/d3ab61726057b7a37963

Александр-Парамонов Автор вопроса

Попробовал сделать. Мне не нравится, много действий нужно сделать. Но сам switch стал хотя бы читаемый type IncomingHandlerPool struct { messages MessagesHandler } type MessagesHandler interface { GetMessages(event models.IncomeEvent) GetChatsCount(event models.IncomeEvent) SendMessage(event models.IncomeEvent) MarkRead(event models.IncomeEvent) NotifyTyping(event models.IncomeEvent) } const ( requestMessages = "request_messages" requestChatsCount = "request_chats_count" sendMessage = "send_message" markRead = "mark_read" notifyTyping = "notify_typing" ) var ( handlerKeys = map[string]string{ requestMessages: handleKey(models.CALL, models.GET, models.TYPE_MESSAGE), requestChatsCount: handleKey(models.CALL, models.GET, models.TYPE_COUNTS), sendMessage: handleKey(models.CALL, models.POST, models.TYPE_MESSAGE), markRead: handleKey(models.CALL, models.POST, models.TYPE_READ), notifyTyping: handleKey(models.CALL, models.POST, models.TYPE_TYPING), } ) // ... switch handleKey(incomeEvent.Action, incomeEvent.Method, incomeEvent.Type) { case requestMessages: handlers.messages.GetMessages(incomeEvent) case requestChatsCount: handlers.messages.GetChatsCount(incomeEvent) case sendMessage: handlers.messages.SendMessage(incomeEvent) case markRead: handlers.messages.MarkRead(incomeEvent) case notifyTyping: handlers.messages.NotifyTyping(incomeEvent) } // ... func handleKey(a int, m string, t string) string { return fmt.Sprintf("%s-%s-%s", a, m, t) }

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта