2015-05-31 81 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