110,536
社区成员
发帖
与我相关
我的任务
分享
var dic = new Dictionary<string, Type> { { "adfa", typeof(Command1) } };
之类的数据库来记录对应解析命令的类型。
然后例如收到 {type="abc", str: ......} 这类消息,写var cmd = (ICommand)Newtonsoft.Json.JsonConvert.DeserializeObject(str, dic[type]));
获得 ICommand,再来执行它。
信令设计比这个稍微复杂一点,除了知道 type、str 内容之外,可能还需要知道序号(用来返回消息时也给一个对应的序号),以及其它信息。
总之这叫做信令设计。你做任何通讯都应该先拿来信令设计文档读一下。public interface ICommand
{
object Execute();
}
来说,假设能收到的消息字符串是str,通过(例如)var cmd = Newtonsoft.Json.JsonConvert.DeserializeObject<ICommand>(str);
var result = cmd.Execute();
这种形式就能得到结果了。
所谓的反射、工厂之类的说法,其实也就是这种时候才需要用一下。一个程序可能有上万行代码,只有2、3处代码才需要反射或者反序列化,其它的地方都不能滥用反射等等纯解析的机制。这类通讯命令处理网关驱动的地方就是一例。