Я разрабатываю распределенное приложение (сервер и клиенты).Некоторые инструкции отправляются сервером (например, InitCommand
, StartCommand
, StopCommand
).У каждой команды есть свои аргументы.Теперь, если речь идет о сериализации и работе в сети, я спрашиваю себя, должен ли я создавать подкласс для каждого типа команды (который наследуется от Command
) или просто помещать все возможные аргументы в класс Command
.
При обработке команды это if (command is InitCommand)
против if (command.Type == CommandType.Init)
.
Моя первая реализация использует первую опцию.Я вручную сериализую и помещаю информацию о типе в начале.Теперь, если я получаю данные (byte[]
) из сети, я, во-первых, проверяю фактический тип (десериализуем только первые k байтов) и, во-вторых, использую некоторые методы десериализации (например, Serializer.Deserialize<InitCommand>
).
Второй варианткажется, намного проще в использовании, потому что я могу использовать автоматическую сериализацию и мне не нужно проверять тип перед десериализацией.Но меня раздражает, что я должен объединить все аргументы в один класс.
Как вы думаете, что лучше, или вы знаете о других подходах?