#c# #coding-style
#c# #стиль кодирования
Вопрос:
Я разрабатываю распределенное приложение (сервер и клиенты). Сервер отправляет некоторые инструкции (например, InitCommand
, StartCommand
, StopCommand
). У каждой команды есть свои собственные аргументы. Теперь, если дело доходит до сериализации и сетевого взаимодействия, я спрашиваю себя, должен ли я создать подкласс для каждого типа команды (который наследуется от Command
) или просто поместить все возможные аргументы в Command
класс.
При обработке команды это if (command is InitCommand)
vs if (command.Type == CommandType.Init)
.
Моя первая реализация использует первый вариант. Я сериализую вручную и помещаю информацию о типе в начало. Теперь, если я получаю данные ( byte[]
) из сети, я сначала проверяю фактический тип (десериализую только первые k байтов) и, во-вторых, использую некоторые методы десериализации (например, Serializer.Deserialize<InitCommand>
).
Второй вариант кажется намного проще в использовании, потому что я могу использовать автоматическую сериализацию и мне не нужно проверять тип перед десериализацией. Но меня раздражает, что я должен помещать все аргументы в один класс.
Как вы думаете, что лучше, или вы знаете о других подходах?
Ответ №1:
Похоже, у вас должен быть один класс с несколькими методами; Start
, Init
, Stop
. Это поддерживало бы все в одном классе. SqlCommand имеет CommandType Text
StoredProcedure
, и TableDirect
и это звучит так, как будто вы пытаетесь перестроить для другого типа команды. Я бы выбрал # 2 и посмотрел, как Microsoft реализовала SqlCommand с CommandType
помощью.