2015-05-31 80 views
0

我已經創建了一個在其默認應用程序中打開文件VB .NET應用 - 提取信息並將其返回到窗體上的列表視圖。最佳方式交互

所有的代碼是在我的主要形式。其主要形式有它

  • Imports Microsoft.Office.Core
  • Imports Microsoft.Office.Interop.Word
  • Imports Microsoft.Office.Interop.Excel

如果將來我想修改我的軟件包含在這個版本沒有想到的其他文件類型,我是對於我希望打開的所有文件類型(包括辦公室)來說,最好爲每個文件類型添加新類並在各個類中包括「導入」?

因此,例如,我會:

  • OpenFileDWG.vb
  • Imports Autodesk.AutoCAD.Runtime

  • OpenFileDOC.vb

  • Imports Microsoft.Office.Interop.Word

等等,等等 這是一個標準方法嗎?如果我這樣做,我可以使用:

If exists LCase(My.Computer.FileSystem.GetFileInfo(Filepath).Extension) THEN strFileOpener = OpenFileDWG & Extension Private fileOpener As strFileOpener

請問這種方法的工作,或將我還需要引用.dll文件中的主要應用,使得這種方法不值得?

如果我用這個辦法,我能不能給.vb文件作爲更新的一部分?

任何意見是非常感謝。

+0

在我看來,像[工廠設計模式(https://msdn.microsoft.com/en-us/library/ee817667.aspx)是你所需要的。將不同的文件類型分爲不同的類,並讓它們全部實現基本接口(打開文件,讀取內容等)。然後爲每個類創建一個抽象工廠類和一個具體工廠(對於每種文件類型都是如此)。啓用新的文件類型插件,您可以使用[MEF(https://msdn.microsoft.com/en-us/library/dd460648%28v=vs.110%29.aspx)來加載具體類。 –

+1

「最佳實踐」的問題大都是題外話堆棧溢出,因爲他們吸引自以爲是的答案和垃圾郵件。 – cybermonkey

+0

Thankyou Zohar - 這正是我尋找的答案。 – GoodJuJu

回答

0

我看來,像一個分級的情況下使用factory design pattern

基本上,工廠設計模式提供了工廠創建的類和使用它們的類之間loose coupling

通過分離不同的文件類型不同類別的開始,並讓他們都繼承了一個基本的抽象類(MustInherit在vb.net)。
然後創建一個工廠類創建創建的具體落實每一個文件讀取器類的。 (意味着每種文件類型)。

我會嘗試用一個簡單的例子來說明:

'' Defines an abstract class that all FileReaders should inherit 
Public MustInherit Class FileReader 
    Public MustOverride Function ReadFileContent(Path As String) As String 
End Class 

現在,所有的類讀取文件必須繼承的FileReader類:

Public Class WordFileReader 
    Inherits FileReader 

    Public Override Function ReadFileContent(Path As String) As String 
    '' TODO: Add code to read the content of the word document and return it as a string. 
    End Function 
End Class 

Public Class ExcelFileReader 
    Inherits FileReader 

    Public Override Function ReadFileContent(Path As String) As String 
    '' TODO: Add code to read the content of the excel file and return it as a string. 
    End Function 
End Class 

然後你可以使用一個簡單的工廠方法(read here to learn about the difference between factory methods and abstract factories)創建您的課程:

Enum FileTypes 
    Word, 
    Excel 
End Enum 

Public Function GetFileReader(FileType As FileTypes) As FileReader 
    Dim FileReader as FileReader = Nothing 
    Select case FileType 
     Case FileTypes.Word: 
      FileReader = New WordFileReader() 
     Case FileTypes.Excel: 
      FileReader = New ExcelFileReader() 
    End Select 
    Return FileReader 
End Function 

要啓用新的fil e類型加載項,您可以使用MEF加載具體類。

+0

Zohar - 再次感謝您花時間提供詳細的解釋。這是我認爲我需要的方法,但不知道「工廠設計模式」。非常感激。 – GoodJuJu

+0

不是一個問題,但這樣以答謝的方式是給予好評的答案,或者接受它(只有當它實際上提供瞭解決您的問題!) –

+0

謝謝。我已經接受了你的答案,因爲這是我將用來實現我所需要的功能。不幸的是,我沒有足夠的聲譽(我生命的故事),以給予好評你的答案雖然:-( – GoodJuJu