[解決済み] 依存性注入は、コンストラクタまたはプロパティ・セッタで行うのですか?
2022-04-28 19:04:27
質問
あるクラスをリファクタリングして、新しい依存関係を追加しているところです。このクラスは現在、コンストラクタで既存の依存関係を取っています。そこで、一貫性を保つために、コンストラクタにパラメータを追加しています。
もちろん、サブクラスがいくつかあり、さらにユニットテスト用もあるので、今はすべてのコンストラクタを合わせて変更して回るゲームをしていて、時間がかかっているんだ。
依存性を得るには、セッター付きのプロパティを使うのが良いのではと考えさせられます。注入された依存関係は、クラスのインスタンスを構築するためのインターフェースの一部であってはならないと思うのです。依存関係を追加すると、すべてのユーザー(サブクラスや直接インスタンス化する人)が突然その依存関係を知ることになります。これはカプセル化を破壊しているように感じます。
そこで、コンストラクタとプロパティの長所と短所について、一般的なコンセンサスを得たいと考えています。プロパティ・セッターを使用する方が良いのでしょうか?
どのように解決するのですか?
まあ、人それぞれですね :-).
依存関係がないとクラスが機能しない場合は、コンストラクタに依存関係を追加してください。クラスは が必要です。 そのため、この変更によって事態を悪化させたいのです。また、完全に初期化されていないクラスを作ること("two-step construction")はアンチパターンです(IMHO)。
依存関係がなくても動作するクラスであれば、セッターで問題ありません。
関連
-
[解決済み] Inversion of ControlとDependency Injectionの比較
-
[解決済み] DIコードではなく、IoCコンテナが必要な理由とは?[クローズド]
-
[解決済み] なぜ依存性注入を使用するのですか?
-
[解決済み] Dependency Injectionのコンストラクタの狂気を回避する方法とは?
-
[解決済み】NodeJSで依存性注入は必要ですか、それともどう対処すれば・・・?
-
[解決済み] 依存性注入は、コンストラクタまたはプロパティ・セッタで行うのですか?
-
[解決済み] DIコンテナを介して作成されたオブジェクトを初期化するパターンはありますか?
-
[解決済み] Ioc/DI - なぜアプリケーションのエントリポイントですべてのレイヤー/アセンブリを参照しなければならないのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン