1. ホーム
  2. dependency-injection

[解決済み] 依存性注入は、コンストラクタまたはプロパティ・セッタで行うのですか?

2022-04-28 19:04:27

質問

あるクラスをリファクタリングして、新しい依存関係を追加しているところです。このクラスは現在、コンストラクタで既存の依存関係を取っています。そこで、一貫性を保つために、コンストラクタにパラメータを追加しています。

もちろん、サブクラスがいくつかあり、さらにユニットテスト用もあるので、今はすべてのコンストラクタを合わせて変更して回るゲームをしていて、時間がかかっているんだ。

依存性を得るには、セッター付きのプロパティを使うのが良いのではと考えさせられます。注入された依存関係は、クラスのインスタンスを構築するためのインターフェースの一部であってはならないと思うのです。依存関係を追加すると、すべてのユーザー(サブクラスや直接インスタンス化する人)が突然その依存関係を知ることになります。これはカプセル化を破壊しているように感じます。

そこで、コンストラクタとプロパティの長所と短所について、一般的なコンセンサスを得たいと考えています。プロパティ・セッターを使用する方が良いのでしょうか?

どのように解決するのですか?

まあ、人それぞれですね :-).

依存関係がないとクラスが機能しない場合は、コンストラクタに依存関係を追加してください。クラスは が必要です。 そのため、この変更によって事態を悪化させたいのです。また、完全に初期化されていないクラスを作ること("two-step construction")はアンチパターンです(IMHO)。

依存関係がなくても動作するクラスであれば、セッターで問題ありません。