3

MVPパターンについて読むと、ViewとPresenterの間に2つの通信パターンがあることがわかりました。

  • ViewはPresenterを認識しませんが、PresenterHasClickHandlerがイベントハンドラーを登録するインターフェイスを実装するUIコントロールを提供します。

  • ビューはプレゼンターを認識します。特に、プレゼンターのハンドラーメソッド名を認識します。たとえば、ビューで[送信]ボタンがクリックされると、ビューはonSubmitButtonClicked()プレゼンターのパブリックメソッドを呼び出します。

後者は、Presenterへのイベントの送信を直接シミュレートできるため、JUnitテストの方が簡単であることがわかりました。しかし、私の理解では、ビューはプレゼンターについて知らないはずです。

トレードオフを解決するための3番目のアプローチは、プレゼンターがイベントハンドラーをビューのコントロールに登録できるようにすることです。ここで、ハンドラーはパブリックプレゼンターメソッドを呼び出します。

public void bind() {
  display.getSubmitButton().addClickHandler(new ClickHandler() {

    @Override
    public void onClick(ClickEvent event) {
      onSubmitButtonClicked();              
    }
  });
}

しかし、これは多くの定型コードを導入します。

View-Presenterコミュニケーションの正しいパターンは何ですか?

4

1 に答える 1

0

私はまだこのことを自分で学ぼうとしていますが、私が今それについて考えている方法は次のようなものです:

public interface View {
    void registerMouseListener(MouseListener listener);
}

public class ViewImpl implements View {
    SomeComponent component; // SomeComponent extends java.awt.Component

    public void registerMouseListener(MouseListener listener) {
        component.addMouseListener(listener);
    }
}

次に、匿名リスナーを追加したり、それ自体をPresenter拡張したりして、これらのイベントに登録するかどうかを決定できます。MouseListener

于 2013-07-24T14:24:29.207 に答える