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