[解決済み] Inversion of Controlとは?
質問
IoC(Inversion of Control)は、初めて遭遇すると非常に混乱することがあります。
- 何ですか?
- どのような問題を解決するのですか?
- どのような場合に使用するのが適切で、どのような場合に使用しないのが適切か?
どのように解決するのですか?
その
Inversion-of-Control
(IoC)
パターンを提供することです。
あらゆる種類の
の
callback
(を直接操作するのではなく(つまり、反転させたり、外部のハンドラ/コントローラに制御を移す)、(反応を制御するもの)です。その
Dependency-Injection
(DI)
パターンは、IoCパターンをより具体的にしたもので、コードから依存性を取り除くことを目的としています。
すべての
DI
の実装は、以下のように考えることができます。
IoC
と呼ぶべきではありません。
IoC
なぜなら、Dependency-Injectionの実装はコールバックよりも難しいからです(一般的な用語であるIoCを使用して、製品の価値を下げないようにしましょう)。
例えば、DIの例として、アプリケーションにテキストエディタのコンポーネントがあり、スペルチェックを行いたい場合を考えてみましょう。標準的なコードは次のようなものでしょう。
public class TextEditor {
private SpellChecker checker;
public TextEditor() {
this.checker = new SpellChecker();
}
}
ここで行ったことは、各要素の間に依存関係を作ることです。
TextEditor
と
SpellChecker
.
IoCのシナリオでは、代わりに次のようなことをします。
public class TextEditor {
private IocSpellChecker checker;
public TextEditor(IocSpellChecker checker) {
this.checker = checker;
}
}
最初のコード例では
SpellChecker
(
this.checker = new SpellChecker();
) を意味します。
TextEditor
クラスは直接
SpellChecker
クラスがあります。
2つ目のコード例では、抽象化を行うために
SpellChecker
の依存クラスは
TextEditor
のコンストラクタのシグネチャを変更します (クラス内で依存関係を初期化しない)。これにより、依存関係を呼び出してから TextEditor クラスに渡すことができるようになります。
SpellChecker sc = new SpellChecker(); // dependency
TextEditor textEditor = new TextEditor(sc);
ここで、クライアントが
TextEditor
クラスは、どの
SpellChecker
の実装に注入しているので、それを使うことになります。
TextEditor
シグネチャを使用します。
関連
-
[解決済み] MVPとMVC、その違いは何ですか?
-
[解決済み] JavaBeanとは何ですか?
-
[解決済み] メソッドと関数の違いは何ですか?
-
[解決済み] 抽象メソッドと仮想メソッドの違いは何ですか?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] 自分」という言葉は何のためにあるのか?
-
[解決済み] インターフェースとベースクラス
-
[解決済み] Inversion of ControlとDependency Injectionの比較
-
[解決済み】関数型プログラミングはGoFデザインパターンに取って代わるか?
-
[解決済み] 実装ではなくインターフェースにプログラムする」とはどういう意味ですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 抽象メソッドと仮想メソッドの違いは何ですか?
-
[解決済み] リスコフ置換原理の例として、どのようなものがありますか?
-
[解決済み] ポリモーフィズムとは何か、何のためにあり、どのように使われるのか?
-
[解決済み] コヒーシ ョンとカップリングの違い
-
[解決済み] 春豆っていったい何?
-
[解決済み】依存関係逆転の原則とは何ですか、なぜそれが重要なのですか?
-
[解決済み] プライベートとプロテクト-ビジビリティ・グッド・プラクティスの懸念点【終了しました
-
[解決済み] オブジェクト指向分析・設計によるエレベータのモデル化 [終了しました]
-
[解決済み] コンストラクタをprivateにするとどうなるのですか?
-
[解決済み] Spring Frameworkにおける依存性注入と制御の逆転とは?