web-dev-qa-db-ja.com

依存関係の逆転はOCPの拡張機能ですか?

私はSOLIDの原則について読んでいて、依存性逆転(DI、ここでは、逆転を達成する1つの方法である依存性注入と区別する)がOpen-Closedの拡張であることを読みました。原則(OCP):OCPが基本的に元のコードに手を加えることなくクラスを拡張可能にすることである場合、それは正確にどういう意味ですか。

3
Ezoela Vacca

DIPでは、クラスが抽象化に依存している必要があります。これらの抽象的な依存関係のさまざまな実装をいつでも提供できるため、クラス自体を変更せずにクラスの動作を変更できる自然な拡張ポイントが作成されます。

もちろん、これはまさにOCPに必要なものです。

たとえば、構築中にインターフェースTaxReporterのインスタンスを必要とするITaxCalculatorがあるとします。 ITaxCalculatorの別の実装を提供することで、TaxReporterクラスを変更せずにレポートを生成する方法を変更しました。

OCPを実現する方法は継承だけではありません。

5
doubleYou