1

Presenter and View (MVP) の次の簡単なコードがあります。ビュー コンストラクターのビュー (つまり、"this") をプレゼンター インスタンスに渡すだけです。しかし、プレゼンター クラスには、パラメーターとしてインターフェイスがあります。View にインターフェイスを実装していることに気付きました。ただし、受け入れるパラメーターが Presenter クラスコンストラクター内のインターフェイスである場合に、クラス (「this」を使用してビューインスタンス) を渡す方法がわかりません。

説明してください。私はちょっと新しいです。

interface IApplicationConnection
{
   string Connect { get; set;}
   void SetText(string text);
}

public partial class MyForm : Form, IApplicationConnection
{
  private Presenter _presenter;

  public MyForm()
  {
    InitializeComponent();
    _presenter = new Presenter(this);
  }

  public string Connect { get; set; }
}

プレゼンター クラス:

public class Presenter
{
  IApplicationConnection _view;
  public Presenter(IApplicationConnection view)
  {
     _view = view;
  }

  public void Clicked()
  {
    _view.SetText("Clicked");
  }
}
4

4 に答える 4

4

あなたの書き込みからすると、「これ」が何を意味するのかよくわからないようです。実際、インスタンス (静的ではない!) メソッドの場合、「this」は常に、メソッドが属し、実行されるインスタンスを指します。

あなたの例では、「これ」は MyView インスタンスを指します。クラスはインターフェイスを実装するため、それをプレゼンター コンストラクターに渡すことができます。

クラスが 3 つのインターフェイスを実装するとします。

public class A : I1, I2, I3 ...

そして、あなたはそれをに渡します

public void Foo( I1, I2, I3 )

その場合、クラス内から Foo を次のように呼び出すことは合法です。

Foo( this, this, this )

このクラスは複数のインターフェースを実装しているため、インターフェースとして表現された 3 つの異なる仕様として「提示」できます。

于 2013-07-02T18:25:46.720 に答える
1

thisそのクラスのインスタンスです

MVP は懸念事項の分離を行い、インターフェイスを介してプレゼンターを注入しているため、モック ビューでプレゼンターを簡単にテストできます。

于 2013-07-02T18:12:12.793 に答える
1

クラスは、プレゼンターで引数として渡されるインターフェイスを実装する必要があるため、クラスのインスタンスを渡すことができます。

これは、コンストラクターによる依存性注入と呼ばれます。このようにして、プレゼンターはインターフェイス IApplicationConnection_view の実装について心配したり、知ったりする必要がないため、デザインが分離されます。機能が実装されていることを知っているだけです。

また、この方法では、偽のオブジェクトでビューをモックし、単体テストでプレゼンターをテストできるため、MVP パターンがよりテストしやすくなります。これがすべてあなたにとって意味があることを願っています。

于 2013-07-02T18:12:18.050 に答える
1

これがまさにインターフェースの仕組みです。クラスのインスタンスを、次のいずれかを受け入れる任意のメソッドに渡すことができます。

  • この正確なクラス
  • その基本クラスのいずれか
  • クラスによって実装されたすべてのインターフェイス。
于 2013-07-02T18:17:11.130 に答える