タグ付けされた質問 「inversion-of-control」

制御の逆転(IoC)は、システムの制御のフローが手続き型プログラミングと比較して逆転される、いくつかのソフトウェアアーキテクチャ設計の側面を説明する抽象的な原理です。

5
IoCのインターフェイスの代わりにFuncを使用する
コンテキスト:C#を使用しています クラスを設計し、それを分離し、ユニットテストを容易にするために、すべての依存関係を渡します。内部的にオブジェクトのインスタンス化は行いません。ただし、必要なデータを取得するためにインターフェイスを参照する代わりに、必要なデータ/動作を返す汎用Funcsを参照するようにします。依存関係を注入するとき、ラムダ式を使用してそれを行うことができます。 私にとっては、単体テスト中に面倒なモックをする必要がないため、これはより良いアプローチのように思えます。また、周囲の実装に根本的な変更がある場合、ファクトリクラスを変更するだけで済みます。ロジックを含むクラスを変更する必要はありません。 ただし、これまでにIoCがこのように行われるのを見たことがないため、見落としがちな潜在的な落とし穴があると思います。私が考えることができるのは、Funcを定義しないC#の以前のバージョンとのわずかな非互換性だけです。これは私の場合は問題ではありません。 より具体的なインターフェイスとは対照的に、IoCのFuncなどの汎用デリゲート/高階関数の使用に問題はありますか?

2
依存性注入のスタイルの実際の違いは何ですか?
依存性注入は初めてなので、アプリケーションでどのスタイルを使用すべきかについていくつか質問があります。Martin FowlerによるInversion of Control ContainersとDependency Injectionパターンを読んだばかりですが、コンストラクター、セッター、インターフェースインジェクションの実際の違いを理解することはできません。 どちらか一方を使用する理由は、コードのクリーニングおよび/または明快さの問題だけであるように思えます。違いはなんですか?あるものを他のものよりも使用することの強力な長所または短所はありますか、それとも前に述べたとおりですか? 私の意見では、コンストラクター注入はすべての中で最も直感的であり、インターフェース注入は最も少ないです。一方、セッターインジェクションは中期ですが、最初にインジェクトした依存関係オブジェクトのインスタンスを変更できるはずですか?このスタイルの注入は、依存関係を必要とするオブジェクトが常に注入されることを保証しますか?私はそうは思わないが、私が間違っているなら私を修正してください。

2
コンパイル時IOC
誰かがコンパイル時にIOCを実行するプロジェクトを開始しましたか(おそらくRoslynまたはLinq MethodInfoを使用して)。 IOCコンテナーでの私の経験はこれまでのところ素晴らしく、いくつかの小さな問題がありませんでした 多くのIOCコンテナは、ここで解決ロジックの多くが発生するため、起動が遅くなります コンパイルがコンストラクターの呼び出しを保証しないため、解決が可能かどうかを確認するのは難しい場合がよくあります。 多くの場合、IOCコンテナーはランタイムに小さなオーバーヘッドを追加します(一部は小さくもなく、多くの場合、すぐに起動するものはゆっくり実行されます) 理想的な解決策は、IOCの代わりにFactoryクラスを追加するコンパイル手順をビルドチェーンに追加することだと思われます。 誰もこれをやったことがありますか?そうでない場合は、なぜですか?

1
制御の反転は依存関係の反転とどのように関連していますか
Web上の多くの記事では、制御の反転と依存関係の反転の原則という用語が混同され、同義語として使用されているように見えます(さらに混乱は、「DIコンテナー」と「IoCコンテナー」と呼ばれるツールによって強制されます)。ウィキペディアの記事は、IoCがDIと同じではないことを説明しようとする素晴らしい仕事をしています。 制御の反転(IoC)は、コンピュータープログラムのカスタム記述部分が汎用の再利用可能なライブラリから制御のフローを受け取る設計を表します したがって、DIPは、モジュールを具体的な実装ではなく抽象化に依存させることです。 IoCは、プログラムフローを別のモジュールに制御することを目的としています。このモジュールで実行できることの1つは、実行時に依存関係を解決することです。 この違いは公平に思えますが、依存関係の解決以外のIoC原則の他のアプリケーションについて誰も言及していません。ウィキペディアの定義は非常に広範であり、その構成といくつかの内部ロジックに基づいてカスタムコードを呼び出すことができるモジュールを使用すると、さらに多くのことができるようです。 それで、私がまだまだ理解できないいくつかの質問があります: IoCとDIPの実際の関係は何ですか?IoCは常にDIPを実装する手段として機能しますか? 依存関係を解決するためのツールがDIコンテナーとIoCコンテナーの両方と呼ばれるのはなぜですか?これは、DIとIoCが同じものであることを意味します。 注:この質問はDIとIoCの違いは何ですか。後者は依存関係のインバージョンではなく、依存関係の注入について質問するためです。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.