这些值中的每一个都代表作为某个过程输入的数据。$enclosure、$delimiter和$headerRow与生成 CSV 内容有关,而$file和$overwriteExistingFile与将内容持久化到磁盘有关。
DI 风格重构的一个标志是识别各种职责(生成、持久化)并将它们封装在自己的类型中。这将重构从“我如何最好地获取这个类的值? ” 到“我如何从这个类中删除这些值的知识?”
为了回答这个问题,我们将定义两个新概念,每个概念都有一个职责,并将它们传递给现有的构造函数:
public function __construct($csvGenerator, $csvFileWriter)
{
...save dependencies...
}
...at some point, generate the CSV content and pass it to the file writer...
通过这种方式,原始类成为生成和文件写入之间交互的协调者,而无需对任何一个活动都有深入的了解。我们将这个类提升到了更高的抽象层次,简化了它,并将它的职责隔离到了它的协作者中。
现在,您将定义两个新类,并使用相关参数构造它们:
发电机
public function __construct($enclosure, $delimiter, $headerRow)
文件编写器
public function __construct($file, $overwriteExistingFile)
有了这些元素,您可以通过创建生成器,然后是文件编写器,然后将两者传递给协调器来将它们组合在一起。