我正在开发一个分布式应用程序(服务器和客户端)。服务器发送了一些指令(例如InitCommand
,StartCommand
,StopCommand
)。每个命令都有自己的参数。现在,如果要进行序列化和联网,我想问自己是应该为每种命令类型(从Command
继承)创建一个子类,还是只将所有可能的参数放在Command
类中。
处理命令时,它是if (command is InitCommand)
vs if (command.Type == CommandType.Init)
。
我的第一个实现使用第一个选项。我正在手工进行序列化,并将类型信息放在开头。现在,如果我从网络接收到数据(byte[]
),则首先检查实际类型(仅对前k个字节反序列化),其次使用一些反序列化方法(例如Serializer.Deserialize<InitCommand>
)。
第二个选项似乎更易于使用,因为我可以使用自动序列化并且不需要在反序列化之前检查类型。但是令我烦恼的是,我不得不将所有论点归为一类。
您认为哪个更好,或者您知道其他方法?
最佳答案
听起来您应该拥有一个带有多种方法的类; Start
,Init
,Stop
。这将支持一堂课中的所有内容。 SqlCommand的CommandType为Text
StoredProcedure
和TableDirect
,听起来就像您要为其他类型的命令重建的内容。我将选择#2,并查看Microsoft如何使用CommandType
实现SqlCommand。