Design Pattern:哪种模式适合读取XLSX文件的FileProcessor设计,也可以读取一个包含多个XLSX文件的zip文件
Design Pattern: Which pattern is suitable for FileProcessor design that reads XLSX file and can also read a zip file that contains multiple XLSX files
我有一个 class 可以读取 XLSX 文件,但要处理的文件也可以是包含 XLSX 文件的 ZIP 文件。
我有以下设计:
FileReader: 读取 xlsx 工作表文件的接口。
interface FileReader {
// returns array of worksheet rows
public function readSheet(string file, string sheetName): array
}
XlsxFileReader 实现文件 reader 使用 PHPSpreadsheet 包读取和 return 工作表行。
FileProcessor:它使用 XlxsFileReader、DataMapper 处理文件,将每个工作表行映射到预期的结构和格式。
这足以读取 .xlsx 文件并对其进行处理。
我现在的问题是我还需要处理包含 xlsx 文件的 zip 文件。
我的 zip 文件处理器应该扩展 FileProcessor 吗?在这种情况下,提取文件然后将文件传递给文件处理器?
恕我直言,策略模式更适合这个用例,明天您将处理另一种文件类型,依此类推https://refactoring.guru/design-patterns/strategy
我有一个 class 可以读取 XLSX 文件,但要处理的文件也可以是包含 XLSX 文件的 ZIP 文件。
我有以下设计:
FileReader: 读取 xlsx 工作表文件的接口。
interface FileReader {
// returns array of worksheet rows
public function readSheet(string file, string sheetName): array
}
XlsxFileReader 实现文件 reader 使用 PHPSpreadsheet 包读取和 return 工作表行。
FileProcessor:它使用 XlxsFileReader、DataMapper 处理文件,将每个工作表行映射到预期的结构和格式。
这足以读取 .xlsx 文件并对其进行处理。
我现在的问题是我还需要处理包含 xlsx 文件的 zip 文件。
我的 zip 文件处理器应该扩展 FileProcessor 吗?在这种情况下,提取文件然后将文件传递给文件处理器?
恕我直言,策略模式更适合这个用例,明天您将处理另一种文件类型,依此类推https://refactoring.guru/design-patterns/strategy