我创建了一个VB .NET
应用程序,用于在默认应用程序中打开文件 - 提取信息并将其返回到表单上的列表视图。
所有代码都是我的主要形式。主要形式有
Imports Microsoft.Office.Core
Imports Microsoft.Office.Interop.Word
Imports Microsoft.Office.Interop.Excel
如果将来我想要修改我的软件以包含此版本中未考虑的其他文件类型,我最好为我希望打开的所有文件类型(包括办公室)添加每个文件类型的新类,包括个别班级的“进口”?
所以例如我会:
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 :(得分: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加载具体类。