継承の優先度

業務アプリにおけるOOPの黎明期、既存の処理を拡張する必要があった場合、継承はかなり優先度の高い選択肢にあったと思うが(差分プログラミングという言葉がもてはやされた頃だ)、インタフェースの登場で優先度は低くなった。
DIコンテナのような、依存性を外部からコントロールすることが出来る機構を使う場合、継承という選択肢の優先度は更に低くなったように思う。
実際に使って開発をしているプログラマであれば判って貰えると思うが、DIコンテナで依存性注入の対象とした型(インタフェース)に関しては、その具象クラスに関するコードは、ほぼ完全にアプリケーションから排除することができる。

従来であれば、本当は具象クラスだけを拡張したいのだが、それをアプリケーション中を記述しなければならないばかりに、継承したクラスと、場合によってはインタフェースを用意しなくてはならなかったのだが、DIコンテナに生成を委任している場合は、実装クラスの中身を変えて、プロパティを追加しても、その変更は設定ファイルに新たなプロパティを追加するだけで済んだりする。通常であれば最悪な公開インタフェースの変更や、個々のアプリケーションの修正を伴う実装クラスの操作コード追加を回避できるのだ。

経験上、システム開発後の保守作業を考えると、継承したクラスは少ないに越したことは無い訳で、そういう意味ではDIコンテナはコードの保守性にも貢献するのではないかと思うのである。