未来验证软件的最佳方式,可以交互式打开默认应用程序的文件

时间:2015-05-31 10:21:30

标签: vb.net excel class import module

我创建了一个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文件作为更新的一部分吗?

非常感谢任何建议。

1 个答案:

答案 0 :(得分:0)

对我而言,就像使用factory design pattern

的分类案例一样

基本上,工厂设计模式在工厂创建的类和使用它们的类之间提供loose coupling

首先将不同的文件类型分成不同的类,然后让它们都继承一个基本的抽象类(vb.net中的MustInherit)。
然后创建一个工厂类来创建创建每个文件读取器类的具体实现。 (对于每种文件类型的含义)。

我将尝试用一个简单的例子来说明:

'' 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

要启用新文件类型加载项,您可以使用MEF加载具体类。