我正在开发分布式应用程序(服务器和客户端)。服务器发送了一些指令(例如 InitCommand
、 StartCommand
、 StopCommand
)。每个命令都有自己的参数。现在,如果涉及序列化和网络,我问自己是否应该为每个命令类型(继承自 Command
)创建一个子类,或者只是将所有可能的参数放在 Command
中类。
处理命令时是if (command is InitCommand)
对比if (command.Type == CommandType.Init)
.
我的第一个实现使用第一个选项。我手动序列化并将类型信息放在开头。现在,如果我从网络接收数据 ( byte[]
),我首先检查实际类型(仅反序列化前 k 个字节),然后使用一些反序列化方法(例如 Serializer.Deserialize<InitCommand>
)。
第二个选项似乎更容易使用,因为我可以使用自动序列化并且不需要在反序列化之前检查类型。但这让我很烦,我必须将所有参数都放在一个类中。
您认为哪种方法更好,或者您知道其他方法吗?
最佳答案
听起来您应该拥有一个包含多个方法的类; 开始
,初始化
,停止
。这将支持一个类中的所有内容。 SqlCommand 有 Text
StoredProcedure
和 TableDirect
的 CommandType,这听起来像是您要为不同类型的命令重建的内容。我会选择 #2 并查看 Microsoft 如何实现 SqlCommand使用 CommandType
。
关于c# - 小类或综合类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8086346/