MVPパターンは、ViewがPresenterにメソッドを公開することを前提としています。たとえば、Viewでは次のように書くことができます。
public HasClickhandlers getButton() {
return myBtn;
}
プレゼンターからこのメソッドにアクセスします。
view.getButton().addclickhanlder() ...
しかし、このスタイルでアプリをビルドすると、不要なコードがたくさんあります。たとえば、私は作成TablesView
したいと思いますTablesPresenter
(そして、TablesPresenter
それTablesView
は最小限のエンティティ(最小限のモジュール)であり、より小さなプレゼンターとビューに分割することはできず、より複雑にすることはできません)。次に、を作成するときにTablesView
、このビュー内に別のカスタムコンポーネントを配置します- MyCustomTable
。そして、Inside MyCustomTable
put MyCustomHeader
、inside MyCustomHeader
putMyCustomFilter
など(このシーケンスははるかに長くなる可能性があります)...したがって、問題は、Presenterから入力されたテキスト(ユーザーによる)にアクセスするときにMyCustomFilter
、メソッドを公開する必要があることですMyCustomFilter
:
//inside MyCustomFilter
public String getFilterText() {
return textBox.getText();
}
次に、を含むウィジェットでMyCustomFilter
-つまり、MyCustomHeader
このメソッドを公開する必要があります。
//inside MyCustomHeader
public String getFilterText() {
return myCustomFilter.getFilterText();
}
その後、内部でMyCustomTable
このメソッドを公開する必要があります。
//inside MyCustomTable
public String getFilterText() {
return myCustomHeader.getFilterText();
}
その後、 (を含む)getFilterText()
内部のメソッドを公開する必要があり、 このすべての操作の後、プレゼンターは内部のテキストにアクセスできます..そして時々このシーケンスはもっと長くなります。では、この問題を解決するにはどうすればよいでしょうか。MVPについて理解できないことがあるかもしれません。TablesView
MyCustomTable
MyCustomFilter