
7.2
モジュール接続のためのパターン
219
しかしその一方で、ステートをもったインスタンスへの依存をハードコードすることで、モジュール
を他のインスタンスと接続させる可能性が制限されてしまい、再利用性が低下してユニットテストの困
難さが増しました。たとえば
authService
を他のデータベースのインスタンスと組み合わせて再利用
することは、特定のインスタンスとの依存関係がハードコードされているのでほぼ不可能です。同様に、
authService
を単独でテストすることは、モジュールが使用しているデータベースを模倣するシステ
ムが簡単には作成できないため、困難な作業になります。
最後になりますが、依存関係のハードコーディングに伴う問題点のほとんどは、インスタンスがス
テートをもっていることと関連しています。つまり、ステートをもたないモジュール(たとえばファクト
リ、コンストラクタ、ステートレスな関数など)を
require()
でロードしたとしても、同じような問題
は起きません。特定の実装と強く結びつくのは同じですが、
Node
ではそれがコンポーネントの再利用
性に悪影響を与えることは通常はありません。特定のステートとの結合を持ち込まないからです。
7.2.2
依存性注入
依存性注入(
dependency injection
:
DI
)パターンは、ソフトウェアデザインに関連する概念の中でも
もっとも誤解されているものではないでしょうか。この言葉は、
Spring
(
Java
、
C#
用)や
Pimple
(
PHP
用)といっ