我在项目中实现的 MVP 模型是 Passive MVP。演示者具有对视图的引用。此外,presenter 有一个 Display 接口,视图必须遵守。
我当前的显示界面如下 -
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()
由 View 实现的都会使相应的ErrorWidget
可见,并且可能还会突出显示相应的InputWidget
(通过将其标记为红色或其他东西)。相反,每个clearXXXError()
方法都会隐藏对应的ErrorWidget
,并从对应的 中移除高亮InputWidget
。这样,presenter 就不必明确地处理 CSS 管理,从而将自己与 CSS 的变化脱钩。只有视图必须担心它。
但是,这种做法最终导致接口中有太多与错误相关的方法。
我想到的另一种方法是ErrorWidget
在界面中公开 s 。但是,GWT 没有HasCss
-type 接口,我必须要么显式指定小部件类型(例如,标签),要么使用IsWidget
接口(这将再次公开整个小部件,而不仅仅是其 CSS 属性)。此外,在这种方法中,我必须在演示者中明确指定 CSS 修改。
我的方法有更好的选择吗?还是我所做的已经足够好?我也希望我目前的方法有任何改进。