将方法存储在自定义Tcp或Udp服务器的字典中.这是个好主意吗?C#
本文关键字:好主意 字典 存储 方法 自定义 Tcp 服务器 Udp | 更新日期: 2023-09-27 18:01:08
我正在考虑将方法存储在字典中(使用友好的用户可读字符串作为关键字(,这样就可以向服务器发送类似"echo,hello-world"的消息,服务器就会知道调用:echo(字符串消息(并传入"hello-world"。
伪代码:
public delegate void NetCommand(object param);
void MyNetCommand(object param)
{
string s = param as string;
Console.WriteLine(s);
}
Dictionary<string, NetCommand> commands = new Dictionary<string, NetCommand>();
static void Main(string[] args)
{
commands.Add("echo", MyNetCommand);
}
void OnReceiveSomeImaginaryMessageAfterItsBeenProcessed(string friendly, object param)
{
commands[friendly]();
}
我的问题是:这是个好主意吗?这样做有缺点吗?或者,这只是做一些已经有了理想解决方案的事情的"错误"方式吗?
我不明白为什么这不是一个好主意,而且将它们存储在内存中意味着你也会得到更深入的提升。
它看起来很酷,只需使用
if (commands.HasKey(friendly))
在做之前…
您也缺少param
,如:
commands[friendly](param);
我个人认为这是一个足够优雅的解决方案。我个人会改变的一个想法是:把一个delefate放进字典的Value中,而不是放一个类对象。在这种情况下,yuo可以很容易地支持未来不断增加的代码复杂性。
public abstract class MyAbstractNetCommand {
public abstract void ExecuteCommand();
}
public class ConcreteCommand : MyAbstractNetCommand {
/*Here additional ConcreteCommand specific methods and state members*/
public override ExecuteCommand() {
// concrete iplementation
}
}
您的性能将是O(log(n((,但是切换/切换字符串将具有相同的O(log((性能,所以您不会做任何坏事。无论如何,命令路由不应该成为瓶颈。