複数の複雑なオブジェクトを作成できるファクトリを実装する必要があります。依存性注入でどのように処理する必要がありますか?
特にMark Seemannのトピックについては、stackoverflow(および他の場所)ですでに多くのトピックを読んでいますが、決定を下すことはできないため、意見が必要です。
例えば:
<?php
class EventFactory
{
public function createEvent($type)
{
switch ($type) {
case 'upload':
return new UploadEvent(new FtpUploader(), new Mailer());
case 'download':
return new DownloadEvent(new FtpDownloader(), new Mailer());
case 'save':
return new SaveEvent(new EventDbModel());
case 'load':
return new LoadEvent(new EventDbModel());
case 'notify':
return new NotifyEvent(new HttpRequester());
}
}
}
いくつかの解決策を見つけましたが、どれを選択すればよいかわかりません。
- 解決策は、例のように、依存関係をインスタンス化する責任をファクトリに与えることです。
問題点: 依存性注入を使用しない場合と同じ問題。
- もう1つは、ファクトリーコンストラクターに依存関係を与えることです
問題: コンストラクターには多くのパラメーターがあり、リストが大きくなる可能性があります。
- 私がインターネットで見つけた 3 番目の解決策は、イベントの代わりに一種のビルダーを作成することです。ファクトリは、作成するオブジェクトの種類を把握する責任を負い、ビルダーはそれらの作成方法を把握します。
問題: ビルダー DP の役割は依存関係を処理することですか? 解決策 1 と同じ問題が発生するのではないかと心配しています。
私たちは何をすべきか ?
ベン