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

    }
}

そのような動作を実装する方法について何か提案はありますか? 各インスタンス内でグローバルにアクセスできるものが必要ですが、各インスタンスには別のグローバル メッセンジャーがあります。

追加情報: 内部 大量のオブジェクト (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
4

1 に答える 1

1

あなたのLoadFileメソッドは現在何も返していないようです - なぜエラーや警告などを含むデータ構造を返さないのですか? グローバルまたは静的、さらには永続的なものは必要ありません。メソッド呼び出しの結果です。

実際、これを少し変更して、(モデル自体ではなく) 別のクラスがロードを担当し、LoadFile呼び出しが次を含む結果を返すようにします。

  • 情報とエラー
  • 結果のモデル オブジェクト

そうすれば、いわば「ロードする準備ができている」のではなく、実際のデータが含まれていることがわかっているモデルがあるときはいつでもできます。

于 2013-03-26T13:22:35.677 に答える