Подкласс или полный класс - PullRequest
3 голосов
/ 11 ноября 2011

Я разрабатываю распределенное приложение (сервер и клиенты).Некоторые инструкции отправляются сервером (например, InitCommand, StartCommand, StopCommand).У каждой команды есть свои аргументы.Теперь, если речь идет о сериализации и работе в сети, я спрашиваю себя, должен ли я создавать подкласс для каждого типа команды (который наследуется от Command) или просто помещать все возможные аргументы в класс Command.

При обработке команды это if (command is InitCommand) против if (command.Type == CommandType.Init).

Моя первая реализация использует первую опцию.Я вручную сериализую и помещаю информацию о типе в начале.Теперь, если я получаю данные (byte[]) из сети, я, во-первых, проверяю фактический тип (десериализуем только первые k байтов) и, во-вторых, использую некоторые методы десериализации (например, Serializer.Deserialize<InitCommand>).

Второй варианткажется, намного проще в использовании, потому что я могу использовать автоматическую сериализацию и мне не нужно проверять тип перед десериализацией.Но меня раздражает, что я должен объединить все аргументы в один класс.

Как вы думаете, что лучше, или вы знаете о других подходах?

1 Ответ

1 голос
/ 11 ноября 2011

Похоже, у вас должен быть один класс с несколькими методами;Start, Init, Stop.Это будет поддерживать все в одном классе.SqlCommand имеет тип CommandType Text StoredProcedure и TableDirect, и это похоже на то, что вы пытаетесь перестроить для другого типа команды.Я бы выбрал # 2 и посмотрю, как Microsoft реализовала SqlCommand с CommandType.

...