タグ付けされた質問 「dependency-injection」

Dependency Injectionは、コンポーネントの依存関係(オブジェクトのインスタンス、プロパティ)がコンストラクタ、メソッド、またはフィールド(プロパティ)を介して設定される設計パターンです。これは、より一般的な依存関係の反転の特殊な形式です。

2
TDDアプリケーションで依存関係を初期化するのは誰ですか?
私はモック/偽のオブジェクトでTDDを実装することを学ぼうとしています。私が持っている質問の1つは、TDDを実装するアプリケーションで依存関係を初期化する方法です。この記事の例 Moq 3でモックを開始すると、次のようになります。 public class OrderWriter { private readonly IFileWriter fileWriter; public OrderWriter(IFileWriter fileWriter) { this.fileWriter = fileWriter; } public void WriteOrder(Order order) { fileWriter.WriteLine(String.Format("{0},{1}", order.OrderId, order.OrderTotal)); } } この例では、コンストラクターがIFileWriterパラメーターを取ります。実際のアプリケーションの場合は実際のファイルライターを、単体テストの場合は偽のファイルライターを提供するためです。私の質問は、実際のアプリケーションでは、誰がこのパラメーターを提供するのですか?このアプリケーションの呼び出し元になると思います。コンストラクタにも依存関係がある場合はどうなりますか?呼び出し元のコードもそれに責任がありますか? たぶん、より良い方法は、ファクトリーを使用することです。この工場はどのように機能しますか?そして、工場はどのように分配されますか?上記の方法のようにコンストラクターパラメーターにありますか?

2
c ++モデルビュープレゼンター:プレゼンターを構築する場所は?
MFCプロジェクトでThe Humble Dialog Boxペーパー(pdf)に記載されているモデルビュープレゼンター(MVP)パターンを使用しています。問題はほとんどのGUIツールキットと同じだと思います。 私を悩ませているのは、プレゼンターだけでなく、プレゼンターが必要とするサービスも作成している具体的なビュー(つまり、ダイアログクラス)です。それは正常ですか?ビューがプレゼンターが必要とするサービスを知る必要があるのはなぜですか?私が考えているのは、プレゼンターをダイアログクラスに依存的に挿入する必要があるということです。 アプリケーションのメインコントロールは、CWinAppから派生したクラスです。では、このクラスでサービスとプレゼンターを作成してから、ダイアログクラスに挿入する必要がありますか? ただし、プレゼンターがコンストラクターでビュークラスへの参照を必要とする場合、ダイアログクラスにプレゼンターを依存性注入するにはどうすればよいですか? MyPresenter(IView *view, MyService *service); また、メインウィンドウがポップアップウィンドウからスポーンした場合、そのウィンドウプレゼンターとサービスの詳細はどこに構築する必要がありますか? これはC ++なので、どんな種類のDIフレームワークにも興味があるとは思いません。 更新 私が持っていた1つのアイデアは、nullビューでプレゼンターを作成し、コンストラクターがプレゼンターをダイアログクラスに挿入し、ダイアログクラスのコンストラクターでSetView(IView *view)プレゼンターのメソッドを呼び出すthis場所thisがダイアログクラスになる場所(IViewから派生)でした。 )。そう: MyApp::Start() { SomeService *service = new SomeService(); MyPresenter *presenter = new MyPresenter(null, service); MyDialog *dialog = new MyDialog(presenter); ... } MyDialog::MyDialog(MyPresenter *presenter): presenter_(presenter) { presenter_->SetView(this); } 少しぎこちないように見えますが、サービスの構築をDialogクラスから除外しています。空のビューは少し危険なようです。代わりの方法は、空のメソッド本体を持つNullViewクラスを実際に作成し、それをプレゼンターコンストラクターに渡すことです。

2
実際のオブジェクトが動的に作成されるときに、テストオブジェクトをどのように注入しますか?
依存関係注入を使用してクラスをテスト可能にしたい。しかし、クラスは実行時に複数のオブジェクトを作成し、コンストラクターに異なる値を渡します。簡単な例を次に示します。 public abstract class Validator { private ErrorList errors; public abstract void validate(); public void addError(String text) { errors.add( new ValidationError(text)); } public int getNumErrors() { return errors.count() } } public class AgeValidator extends Validator { public void validate() { addError("first name invalid"); addError("last name invalid"); } } (Validatorには他にも多くのサブクラスがあります。) これを変更する最良の方法は何ですか?ValidationErrorの代わりに偽のオブジェクトを注入できますか? …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.