2012-01-20 30 views
0

我正在寫一個Windows窗體應用程序,它讀取一個文件,對其進行處理,然後提交更改。將窗體事件連接到不同的對象

根據某些情況,當我從窗體中單擊「過程按鈕」時,我希望它與特定對象進行交互,例如,根據文件的擴展名,文件由特定類處理該類型的文件。

就應用架構而言,最好的方法是什麼?

+0

問題是相當普遍的,你有一些代碼開始,你可以發佈? –

+0

對不起,沒有發佈任何代碼,我有代碼,但它是與約9000行代碼完全混亂:s,我要重寫它。應用程序相當複雜,但其核心概念就像我給出的例子。 –

回答

2

因此,例如.txt文件由TextParser處理,.csv文件由CSVParser處理,.doc文件由MSWordParser處理,其他所有內容由GenericParser等處理?那麼,第一件事就是創建一個接口,即IParser,以便每個類都有一個.Parse(文件)方法。

接下來是使用類匹配文件擴展名字符串的任務。我想到的第一件事就是一本詞典。關鍵是將文件擴展名作爲字符串,並且該值將是該類型文件擴展名的解析器。在進行任何處理之前,您需要填寫您希望支持的所有文件擴展名的字典。

一些假設爲此良好運作: - 您沒有大量支持的文件擴展名。 - 解析器的一個實例可以重複使用 - 新解析器並不特別昂貴;除了語言需要對新對象做什麼之外,還有很少的初始化。

+2

這是一個好主意。也許使用[Factory Method](http://www.blackwasp.co.uk/FactoryMethod.aspx)模式通過將文件擴展名傳遞給FactoryMethod來創建從'IParser'派生類型的實例? –

0

我會去工廠模式。

public interface IFileParser 
{ 
    void perse(string fileToParse); 
} 


    public static class FileParserFactory 
    { 
     public static IFileParser GetParser(string fileToParse) 
     { 
      FileInfo file = new FileInfo(fileToParse); 
      IFileParser parserToReturn = null; 

      switch (file.Extension.ToLower()) 
      { 
       case "csv": parserToReturn = new CSVFileParser(fileToParse); 
        break; 
       case "txt": parserToReturn = new TextFileParser(fileToParse); 
        break; 
      } 

      return parserToReturn; 
     } 
    } 
相關問題