库消息处理

本文关键字:消息处理 | 更新日期: 2023-09-27 18:06:07

我正在构建一个可以将复杂文件解析为数据模型的库。在库内部,在解析期间和在我正在构建的数据结构上的一些其他操作期间,可能会出现某些消息(信息、警告、错误)。

我需要一种方法让库的用户获取这些消息。我正在考虑的所有事情都归结为一些静态事件或这些消息的静态列表。但是我希望数据结构的每个对象都有自己的消息队列。

一个例子:

class Program
{
    static void Main(string[] args)
    {
        CalibData cd1 = new CalibData();
        cd1.LoadFile(@"C:'tmp'file.ext");
        var messageList = cd1.GetMessages();
        cd1.DoOtherStuff();

        CalibData cd2 = new CalibData();
        cd2.LoadFile(@"C:'tmp'file2.ext");
        cd2.LoadFile(@"C:'tmp'file3.ext2");
        messageList = cd1.GetMessages(); //Do other stuff could have produced new Messages
        var messageList2 = cd2.GetMessages();
    }
}

你对如何实现这样的行为有什么建议吗?我需要在每个实例中全局可访问的东西,但每个实例都有另一个全局信使。

附加信息:在内部,我使用了一个ANTLR解析器,它生成了很多对象(50,000 +)。一旦创建了数据结构,就会在对象上设置大量的交叉引用,等等。我的主要问题是,我要么必须创建一个静态成员来处理这个问题,要么从LoadFile()传递一个信使到我的解析器的函数调用,交叉引用等。在我看来,两者都是一个相当糟糕的选择。改变设计不是一个选择,因为我还有更多的问题。数据结构存储在2个文件中(一个文件= description,另一个文件= data)。所以我可以命名为

CalibData cd = new CalibData();
cd.LoadFile("description file"); //after this call the datastructure is built, but it hasn't got any value data yet
cd.LoadFile("data file") //now the structure also has value data
cd.ClearData();
cd.LoadFile("yet another data file"); //same structure different data

库消息处理

看起来你的LoadFile方法目前不返回任何东西-为什么不让它返回一个包含错误,警告等的数据结构?不需要任何全局或静态的东西——甚至不需要持久的东西。只是方法调用的结果。

事实上,我可能会稍微改变这一点,以便一个单独的类(而不是模型本身)负责加载,并且LoadFile调用将返回包含

的结果:
  • 信息和错误
  • 结果模型对象

这样,任何时候你有一个模型,你知道它包含实际的数据-而不是"准备加载",因为它是。