将标识符与消息关联的好解决方案是什么



有时应用程序一开始会发出人类可读的字符串(例如日志消息),然后我们决定以后要以编程方式处理这些字符串,可能会以某种方式显示某些字符串,或者对其他类型的字符串进行计数以显示出现次数。

为了做到这一点,处理这些字符串的代码需要知道每个字符串的"含义",这样才能对其进行相应的分类和处理。。。我的问题是如何最好地做到这一点?显然,您不希望代码与每条消息的文本进行字符串比较。。这既尴尬又脆弱。

我看到的一些解决方案包括在字符串前面加一个消息标识符,比如M123,这样您的处理代码就可以读取这个标识符,并据此确定如何处理字符串。这似乎也不太可取,因为您必须跟踪已经使用的消息标识符,等等。

Exmaple:你有一个应用程序,它可以启动许多机器人,向它们发出各种命令来初始化它们,并执行所需的任务。最初,你的应用程序中与机器人交互的各个部分会向一些输出(可能是日志)发出文本消息,比如:

机器人1启动初始化机器人1正在等待SSH回复机器人2启动初始化机器人4初始化完成机器人3无法在超时内回复机器人1关闭…

过了一段时间,你会意识到,除了文本滚动日志之外,你还想以图形方式显示每个机器人的某种表示,也许是一个窗口,其中有一个复选框,用于显示其生命周期中可能发生的每个重要里程碑。这将是一个更有用的替代UI。

例如,当Robot成功启动时,以及当它成功完成任务时,您希望显示一个复选框,依此类推

问题变成了,这个新的"视图"应该如何解释你的应用程序发出的当前消息,以便它知道它们的"含义"并能够处理它们?例如,如果视图想要显示已完成初始化的Robot的指示符,它是否应该与查找文本"Robot N initialization complete"的日志消息进行字符串比较?这似乎很脆弱,因为有一天你可能会调整日志消息的文本。

一种选择可能是在每个日志消息的发送前加上一个唯一的、不变的消息标识符,例如"M24 Robot 1已完成初始化"。这样,新视图只是解析出M24,并知道它代表"初始化完成"。

在这种情况下,我看到一个简单的类带有2个道具。。。一个字符串和另一个标识符,我需要把它保存在内存中。。。"在运行时,用户只能看到字符串属性,但通过编程我将访问隐藏属性…要在简单字符串中重新构造此类,您可以重写ToString方法…

例如

public class Message
{
    public void int MessageId {get; set;}
    public void string UserMessage {get; set;}
    public override string ToString()
    {
        return UserMessage;
    }
}

最新更新