我正在开发一个分布式应用程序(服务器和客户端)。服务器发送了一些指令(例如InitCommandStartCommandStopCommand)。每个命令都有自己的参数。现在,如果要进行序列化和联网,我想问自己是应该为每种命令类型(从Command继承)创建一个子类,还是只将所有可能的参数放在Command类中。

处理命令时,它是if (command is InitCommand) vs if (command.Type == CommandType.Init)

我的第一个实现使用第一个选项。我正在手工进行序列化,并将类型信息放在开头。现在,如果我从网络接收到数据(byte[]),则首先检查实际类型(仅对前k个字节反序列化),其次使用一些反序列化方法(例如Serializer.Deserialize<InitCommand>)。

第二个选项似乎更易于使用,因为我可以使用自动序列化并且不需要在反序列化之前检查类型。但是令我烦恼的是,我不得不将所有论点归为一类。

您认为哪个更好,或者您知道其他方法?

最佳答案

听起来您应该拥有一个带有多种方法的类; StartInitStop。这将支持一堂课中的所有内容。 SqlCommand的CommandType为Text StoredProcedureTableDirect,听起来就像您要为其他类型的命令重建的内容。我将选择#2,并查看Microsoft如何使用CommandType实现SqlCommand

10-01 20:11