0

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

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

一个例子:

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();

    }
}

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

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

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
4

1 回答 1

1

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

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

  • 信息和错误
  • 生成的模型对象

这样,只要您有一个模型,您就知道它包含实际数据——而不是像以前那样“准备好加载”。

于 2013-03-26T13:22:35.677 回答