|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
24.08.2013, 21:32 | #1 |
Регистрация: 17.11.2010
Сообщений: 4
|
Ветвления, свитчи-кейсы
Всем ПРОграммистам привет!
Я долго искал в интернете, может плохо, может не так задавал вопрос, но увы, ответа не нашел. Вопрос в следующем, сервер принимает пакеты и обрабатывает их, но IFать и SWITCHать 30-40 с немалым пакетов, мягко говоря, не удобно. Какой может быть выход? Приминение паттерна "стратегия" не нашел, т.е. как были ифы/свитчи так и остались, просто обработка пакетов усложнилась и отдалилась. Какие есть варианты? |
24.08.2013, 22:41 | #2 |
Форумчанин
Регистрация: 03.01.2013
Сообщений: 388
|
Можно постараться использовать механизм наследования.
Ведь каждый case является "конкретной" реализацией "общей" концепции решения задачи. |
24.08.2013, 22:44 | #3 | |
Форумчанин
Регистрация: 09.07.2013
Сообщений: 249
|
Цитата:
do not use your brain
|
|
24.08.2013, 23:02 | #4 |
Регистрация: 17.11.2010
Сообщений: 4
|
К сожалению, конкретно 33 пакета общие, а затем они передаются на обработку на уровень дальше. Т.е. грубо говоря определяется к какому типу относится пакет, а потом он уже разбирается и тп
|
24.08.2013, 23:13 | #5 |
Пользователь
Регистрация: 10.08.2013
Сообщений: 67
|
а логически разбить на составляющие? вроде: выставлен флаг F1 - отправляем пакет на корм ф-ции/методу parseF1packet(отсеяли треть - хорошо), в parseF1packet проверяем флаг F2 - отправляем ф-ции parseF1F2packet и т.д.
если для пакетов можно вычленить сигнатуру - можно хоть примитивный CRC16 брать от сигнатуры, а потом через фабрику классов(хотя там тоже switch, но будет хоть как-то интеллигентней)... |
24.08.2013, 23:14 | #6 |
Регистрация: 17.11.2010
Сообщений: 4
|
вся фишка как раз в том, что логически они уже все собраны.
Я надеялся что есть какой-то другой вариант, но от jmz видимо не уйти никуда Спасибо за мысли и помощь! |
25.08.2013, 00:44 | #7 | |
Пользователь
Регистрация: 10.08.2013
Сообщений: 67
|
Цитата:
(*funcarr[pckt.type])(&pckt); |
|
25.08.2013, 00:56 | #8 | |
Форумчанин
Регистрация: 09.07.2013
Сообщений: 249
|
Цитата:
do not use your brain
|
|
25.08.2013, 01:06 | #9 |
Пользователь
Регистрация: 10.08.2013
Сообщений: 67
|
и чего стесняться, если человек хочет уйти от cmp/jmpz,ja,jbe,jle?
|
25.08.2013, 01:29 | #10 | |
Форумчанин
Регистрация: 09.07.2013
Сообщений: 249
|
Цитата:
do not use your brain
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ветвления | AK55 | Паскаль, Turbo Pascal, PascalABC.NET | 4 | 06.05.2013 19:03 |
скрипт и веселые тест кейсы | Dimsssss | SQL, базы данных | 1 | 04.02.2013 23:00 |
Ветвления | Евгений2508 | Помощь студентам | 0 | 15.10.2012 12:22 |
Ветвления | Евгений2508 | Помощь студентам | 0 | 14.10.2012 09:54 |
Ветвления | Евгений2508 | Помощь студентам | 1 | 14.10.2012 09:50 |