私のプロジェクトで実装した MVP モデルはパッシブ MVP です。プレゼンターはビューへの参照を持っています。また、プレゼンターには、ビューが従わなければならないディスプレイインターフェイスがあります。
私の現在のディスプレイインターフェースは以下の通りです -
public interface Display {
Widget asWidget();
<Control extends HasValue<String> & HasBlurHandlers> Control code();
<Control extends HasValue<String> & HasBlurHandlers> Control name();
<Control extends HasValue<String> & HasBlurHandlers> Control address();
<Control extends HasValue<String> & HasBlurHandlers> Control contactNumber1();
<Control extends HasValue<String> & HasBlurHandlers> Control contactNumber2();
<Control extends HasValue<String> & HasBlurHandlers> Control email();
<Control extends HasValue<String> & HasBlurHandlers> Control registrationNumber();
<Control extends HasValue<String> & HasBlurHandlers & HasEnabled> Control registrationYear();
HasClickHandlers saveControl();
HasClickHandlers cancelControl();
void setCodeError(String message);
void setNameError(String message);
void setAddressError(String message);
void setContactNumber1Error(String message);
void setEmailError(String message);
void setRegistrationNumberError(String message);
void clearCodeError();
void clearNameError();
void clearAddressError();
void clearContactNumber1Error();
void clearEmailError();
void clearRegistrationNumberError();
}
ここでの問題は、入力エラー メッセージの設定/クリアに使用されるメソッドです。setXXXError()
ビューによって実装されたそれぞれは、対応するものErrorWidget
を表示し、おそらく対応するものを強調表示しますInputWidget
(赤などでマークします)。逆に、各clearXXXError()
メソッドは対応する を非表示にし、対応ErrorWidget
する からハイライトを削除しますInputWidget
。このように、プレゼンターは CSS 管理を明示的に処理する必要がないため、CSS の変更から切り離されます。ビューだけがそれについて心配する必要があります。
ただし、このアプローチでは、インターフェイス内のエラー関連のメソッドが多すぎます。
私が考えた別のアプローチはErrorWidget
、インターフェイスで s を公開することです。しかし、GWT にはHasCss
-type インターフェイスがないため、明示的にウィジェット タイプ (たとえば、ラベル) を指定するか、IsWidget
インターフェイスを使用する必要があります (これにより、CSS プロパティだけでなく、ウィジェット全体が再び公開されます)。また、このアプローチでは、プレゼンターで CSS の変更を明示的に指定する必要があります。
私のアプローチに代わるより良い方法はありますか? または、私がしていることは十分ですか?また、現在のアプローチの改善も気に入っています。