私は依存性注入について読んでいますが、私が見つけた例は私には悪いコードのように見えます.より良い例はありますか?
class Photo {
protected $db;
public function __construct()
{
$this->db = DB::getInstance();
}
}
したがって、これは悪いコードであり、すべての変数を明示的に設定すると多数のセッターが作成される可能性があるため、依存性注入の提案は次のとおりです。
class Container {
protected $db;
public static newPhoto()
{
$photo = new Photo;
$photo->setDB(static::$db);
$photo->setConfig();
$photo->setResponse();
return $photo;
}
}
$photo = Container::newPhoto();
しかし、間違っている場合は訂正してください。別のクラスを構築することが唯一の責任であるクラスを構築したばかりで、まったく無意味に思えます。明らかに非常に悪い考えである静的メソッドを使用しています。
私が目にする利点の 1 つは、驚くべきことに言及されていないことですが、最初の例ではテストできませんでしたが、setter を使用して Photo クラスを個別にテストできるようになったことです。
このようなものは私にとってより理にかなっています:
class Photo {
protected $db;
protected $config;
protected $response;
public function __construct($dbConn=null,$config='123',$response=true)
{
if(is_null($dbConn))
$this->db = DB::getInstance();
else
$this->db = $dbConn;
...etc
}
}
$photo = new Photo($dbConn);
クラスはそれ自体を構築します。静的メソッドを実際に呼び出す必要はありません。値が使用されている場合、クラスはダミー データでテストできます。コンテナとは対照的に、依存関係はまだいくらか明白です。