Email or username:

Password:

Forgot your password?
devadideva

Всем здравствовать! Какой бы то ни было протокол обычно имеет несколько версий, поэтому сервер должен уметь обрабатывать запросы не только новейших, но и старых версий. Отсюда вопрос: как структурировать код сервера, чтобы он мог это делать?

Самое простое решение, оно же самое расточительное, заключается в написании отдельного модуля для каждой версии. При этом имеются следующие недостатки: низкое переиспользование кода; высокая ветвистость -- возникают конструкции вроде следующих:

if (protocol_version == 0)
protocol_method_0(...);
else if (protocol_version == 1)
protocol_method_1(...);

Более того -- при обновлении протокола придётся дописывать по ветви во *всей* программе!

Ещё одним способом решения может быть модификация предыдущего метода: включить в вызов каждой функции протокола аргумент версии. Тогда можно будет делать так:

protocol_method(protocol_version, ...);

Ветвистость, конечно, останется, но её будет меньше, поскольку мы её перенесли в код самих функций, реализующих протокол.

Но вот что делать, скажем, если в новой версии протокола изменена сигнатура функции? Тогда мы снова вынуждены городить if-else для того, чтобы правильно работать. В этом случае можно придумать ввести дополнительный аргумент "сырых" данных, в которых может быть что угодно или сделать все функции с переменным числом аргументов, а что туда писать прописать в документации, однако это уж слишком непрозрачно.

Делают же как-то это и уже много лет! Например, если указать gcc использовать такой-то стандарт, он и будет его использовать! Читал ещё про шаблон "Стратегия", но он годится только для объектно-ориентированных языков. Как-то же справлялись с этим до Java/C++ и подобных?
@tech@mastodon.ml

3 comments
yesfreenet

@devadideva @tech

Хорошо, что не свой универсальный стандарт, а то было бы три стандарта. 😅

devadideva

@yesfreenet@mastodon.ml @tech@mastodon.ml Не совсем понимаю, что за универсальный стандарт? И почему три?

yesfreenet

@devadideva @tech есть два стандарта.
Давайте придумаем один универсальный.

Теперь у нас три стандарта ит.п.

[DATA EXPUNGED]
Go Up