複雑なファイルをデータモデルに解析できるライブラリを構築しています。解析中のライブラリ内およびデータ構造に対する他の操作中に、特定のメッセージ (情報、警告、エラー) が発生する可能性があります。
ライブラリのユーザーがこれらのメッセージを取得する方法が必要です。私が考えていることはすべて、静的イベントまたはそれらのメッセージの静的リストに要約されます。しかし、データ構造の各オブジェクトには独自のメッセージ キューが必要です。
例:
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();
}
}
そのような動作を実装する方法について何か提案はありますか? 各インスタンス内でグローバルにアクセスできるものが必要ですが、各インスタンスには別のグローバル メッセンジャーがあります。
追加情報: 内部 大量のオブジェクト (50.000+) を生成する ANTLR パーサーを使用しています。データ構造が作成されると、オブジェクトなどに多くの相互参照が設定されます。私の主な問題は、これを処理するために静的メンバーを作成するか、LoadFile() からメッセンジャーを関数呼び出しに非常に深く渡す必要があることです。パーサー、相互参照など。私の意見では、どちらもかなり悪い選択です。私の問題には他にもあるので、デザインを変更することはオプションではありません。データ構造は 2 つのファイルに保存されます (1 つのファイル = 説明、もう 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