1

私はそれを「配達員」と呼んでいます。私はそれのいくつかの変形を見てきましたが、問題は、クラスがそれを共同作業者に渡すという唯一の目的のために依存関係を持ち、依存関係自体を決して使用しないということです。

(私はPHPを使用しています。これは、私が最もよく知っているものですが、これは言語に依存しないためです)

class Dependency{}

class B {
    public function setDependency(Dependency $dependency) {
        //...
    }
}

class A {
    private $b;
    private $dependency;

    public function __construct(Dependency $dependency, B $b) {
        $this->dependency = $dependency;
        $this->b = $b;
    }

    public function foo() {
        $this->b->setDependency($this->dependency);
    }
}

おそらく、私が実際に目にする最も一般的なバリアントは、この目的で継承を悪用することです。親クラスが実際に依存関係自体を使用しない場合でも、子クラスが依存関係にアクセスできるように、親クラスにプロパティが存在します。

class Dependency{}



class A {
    protected $dependency;

    public function __construct(Dependency $dependency) {
        $this->dependency = $dependency;
    }
}

class B extends A {
    public function foo() {
        $this->dependency->bar();
    }
}

私はこれを私が望むよりはるかに多くのコードで見ています、そしてそれは私をあまり幸せにしません!なぜそれが悪い考えなのかについて人々を読書資料にリンクできるように、これに名前があるのだろうかと思いました。現状では、何を検索すればいいのかわかりません!

4

2 に答える 2

1

名前はわかりませんが、配達員が好きです...名前の境界線を不快に思う人もいるかもしれませんが。

通常、この問題は依存性注入またはサービスロケーターのいずれかで解決されますが、これにシングルトンを使用する人が多すぎます(不適切)。

PHPが(貧乏人のDIではなく)実際のDIソリューションを提供するかどうかを知るには、PHPに精通していませんが、そうでない場合はサービスロケーターが受け入れられると思います(サービスロケーターはコードの臭いであることが多いですが)それ自体)。

于 2012-10-09T16:44:43.437 に答える