2013-03-26 110 views
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(); 

    } 
} 

你有關於如何實現這樣behavoir有什麼建議?我需要在每個實例內全局訪問的東西,但每個實例都有另一個全局消息傳遞者。

附加信息: Internall我正在使用一個ANTLR解析器,它可以生成很多對象(50.000+)。一旦創建了數據結構,就會在對象上設置很多交叉引用等。我的主要問題是,我必須創建一個靜態成員來處理這個問題,或者從LoadFile()傳遞一個非常深入我的函數調用中的信使的解析器,交叉引用等。在我的opionion中,這是一個相當不好的選擇。更改設計不是一種選擇,因爲我的問題更多。數據結構存儲在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 

回答

1

它看起來像你的LoadFile方法目前並不返回任何東西 - 爲什麼不把它返回一個包含錯誤,警告等數據結構?不需要全局或靜態的任何東西 - 甚至是持久的。只是方法調用的結果。

其實,我可能改變這種略帶讓一個單獨的類(而不是模型本身)負責裝載和LoadFile調用將返回一個包含結果:

  • 信息和錯誤
  • 由此產生的模型對象

這樣,任何時候你有一個模型,你知道它包含了實際的數據 - 而不是它是「準備加載」因爲它瓦特ERE。

+0

我想過這個,但模型更復雜。它可以容納多個模型(每個文件類型一個模型)。我知道設計可以一起改變,但用戶需要這種方式,其中大多數是工程師而不是軟件開發人員。 LoadFile實際上在CalibData對象的內部生成了東西,而不是返回一些東西。 – metacircle 2013-03-26 13:52:07

+0

@metacircle:在我看來,這裏的背景比你告訴我們的更多,使得不可能真正滿意地回答。是的,我明白'LoadFile'在'CalibData'內部產生了一些東西 - 我說這是一個糟糕的設計,但是*即使你想保持這種設計,你可以使用'LoadFile'的返回值來指示錯誤和警告。 – 2013-03-26 13:53:45

+0

我編輯了我的第一篇文章,希望更清楚。 – metacircle 2013-03-26 14:16:49