2

MVCでは、ビューはイベントをコントローラーに送信し、コントローラーはこれらのイベントをモデルに送信します。モデルはコントローラーを介してビューに変更を送信します。

これにより、依存関係の注入 (フレームワークを使用せずに、コンストラクターを介して依存関係を手動で注入しています) が不可能になる循環依存関係が導入されます (その結果、コードの単体テストが難しくなります)。潜在的な解決策を読みましたが、これを適用する方法がわかりません。

誰かが私に解決策を教えてもらえますか?

前もって感謝します。

4

2 に答える 2

2

別の解決策は、IoC コンテナーにファクトリーを作成させ、代わりにそれらを注入することです。MVP 実装の例でこの同様の問題を見てください。具体的なビューにはプレゼンターが必要ですが、プレゼンターには IView (抽象化) が必要です。依存関係というより循環参照に似ています。

public interface IView
{
    string Name { get; set; }
}

public interface IPresenterFactory<TController>
{
   TController Create<TView>(TView view);
}

public class ConcreteView : IView
{
    private Presenter _Presenter;
    public ConcreteView(IPresenterFactory<Presenter> presenter)
    {
        this._Presenter = presenter.Create(this);
    }
 }

 public class Presenter
 {
      public Presenter(IView view)
      {
         this._View = view;
      }
 }

プレゼンター ファクトリは、IoC コンテナーを簡単に利用してラップし、必要に応じてファクトリを生成するだけです。IPresenterFactory のモックを作成し、必要なプレゼンターまたはコントローラーを構築するだけで非常に簡単にできるため、単体テストも簡単です。

于 2012-07-20T09:53:07.543 に答える
1

自分で見つけたものの、まだ気づいていない可能性のある解決策の 1 つ:

MVC では、ビューはイベントをコントローラーに送信し、コントローラーはこれらのイベントをモデルに送信します。モデルはコントローラーを介してビューに変更を送信します。

ビューとモデルは、イベントを発行して (オブザーバー パターンと考えてください)、コントローラーに通知することができます。つまり、モデルでもビューでもコントローラーに依存しないということです。

于 2012-07-20T09:37:46.443 に答える