これらの各値は、あるプロセスへの入力であるデータを表します。$enclosure、、$delimiterおよび$headerRowはCSVコンテンツの生成に関係し、$fileおよび$overwriteExistingFileはコンテンツをディスクに永続化することに関係します。
DIスタイルのリファクタリングの特徴は、さまざまな責任(生成、永続化)を識別し、それぞれを独自のタイプにカプセル化することです。これにより、リファクタリングが「このクラスの値を取得するにはどうすればよいですか?」からシフトします。「このクラスからこれらの値の知識を削除するにはどうすればよいですか?」
これに答えるために、2つの新しい概念を定義し、それぞれが1つの責任を負い、それらを既存のコンストラクターに渡します。
public function __construct($csvGenerator, $csvFileWriter)
{
...save dependencies...
}
...at some point, generate the CSV content and pass it to the file writer...
このようにして、元のクラスは、どちらのアクティビティについても深い知識がなくても、生成とファイル書き込みの間の相互作用のオーケストレーターになります。クラスをより高いレベルの抽象化に昇格させ、クラスを簡素化するとともに、その責任を共同作業者に分離しました。
ここで、2つの新しいクラスを定義し、関連するパラメーターを使用してそれらを構築します。
発生器
public function __construct($enclosure, $delimiter, $headerRow)
ファイルライター
public function __construct($file, $overwriteExistingFile)
これらの要素を配置したら、ジェネレーターを作成し、次にファイルライターを作成し、両方をオーケストレーターに渡すことで、それらを一緒に構成できます。