PHP依存注入と容器
1464 ワード
前言:
この話題を話す前に、「逆置きの原則に依存する」という比較的ハイエンドの思想を話します.「依存逆置きはソフトウェア設計思想であり、従来のソフトウェアでは、上層コードは下層コードに依存し、下層コードが変更された場合、上層コードもそれに応じて変更されるため、メンテナンスコストが高い.また、逆置きの原則に依存する思想は、上層は下層に依存すべきではなく、インタフェースに依存すべきである.上層コード定義インタフェースであり、下層コードはこのインタフェースを実現し、下層を上層インタフェースに依存させ、結合度を低下させ、システムの弾力性を高める」という観点から、DI(依存注入)に対する私の観点は、注入に依存するというより、管理に依存しているが、composer、pip、mavenのようなより高い管理アプリケーションとライブラリ間の依存ツールに似ており、DIフレームワークはこれらのメリットをもたらす(良いDIフレームワークが前提)
栗:
について述べる
上記は単純な栗ですが、生産段階では上記のコードは推奨されません
この話題を話す前に、「逆置きの原則に依存する」という比較的ハイエンドの思想を話します.「依存逆置きはソフトウェア設計思想であり、従来のソフトウェアでは、上層コードは下層コードに依存し、下層コードが変更された場合、上層コードもそれに応じて変更されるため、メンテナンスコストが高い.また、逆置きの原則に依存する思想は、上層は下層に依存すべきではなく、インタフェースに依存すべきである.上層コード定義インタフェースであり、下層コードはこのインタフェースを実現し、下層を上層インタフェースに依存させ、結合度を低下させ、システムの弾力性を高める」という観点から、DI(依存注入)に対する私の観点は、注入に依存するというより、管理に依存しているが、composer、pip、mavenのようなより高い管理アプリケーションとライブラリ間の依存ツールに似ており、DIフレームワークはこれらのメリットをもたらす(良いDIフレームワークが前提)
栗:
class Human
{
public function eat()
{
echo "eat";
}
}
class Man
{
protected $human;
/**
*
* Man constructor.
* @param $human
*/
public function __construct($human)
{
$this->human = $human;
}
public function sex()
{
$this->human->eat();
echo "man";
}
}
/**
*
* Class Container
*/
class Container
{
static $class = [];
public static function bind($className, Closure $closure)
{
self::$class[$className] = $closure;
}
public static function make($className)
{
$closure = self::$class[$className];
return $closure();
}
}
Container::bind('human', function () {
return new Human();
});
Container::bind("man", function () {
$human = Container::make('human');
return new Man($human);
});
$man = Container::make("man");
$man->sex();
について述べる
上記は単純な栗ですが、生産段階では上記のコードは推奨されません