これが私のGwtの問題です。たとえば、メール、firstName、ユーザー名、パスワード...テキストボックスと送信ボタンを含むフォームを取得しました。ユーザーが [送信] をクリックすると、クライアントはすべてのフィールドを検証し、すべてのフィールドに問題がなければ、まったく同じ検証のためにサーバーに送信されます。
誰かがユーティリティ クラスを作成し、そのクラスを共有パッケージに入れることを提案しました。
このコードを見てください
my.com.client パッケージ内:
import my.com.shared.Utility;
public class CustPresenter extends
Presenter<CustPresenter.MyView, CustPresenter.MyProxy> {
@Inject DispatchAsync dispatchAsync;
public void postData(){
PostData postDataAction=new PostData();
String fName=fNameTextBox.getText();
String lName=lNameTextBox.getText();
//....... more field here ....//
if(!Utility.isOKString(fName)){
MyDialogBox myD=new MyDialogBox(fName, "Not OK");
}
else if (!Utility.isOKString(lName)){
MyDialogBox myD=new MyDialogBox(lName, "Not OK");
}
///.......more checking here//
postDataAction.setFName(fName);
postDataAction.setFName(lName);
//... more setting here...//
dispatchAsync.execute(postDataAction, postDataCallback);
}
private AsyncCallback<PostDataResult> postDataCallback=new AsyncCallback<PostDataResult>(){
@Override
public void onFailure(Throwable caught) {
}
@Override
public void onSuccess(PostDataResult result) {
String resultStr=result.getResult();
if(resultStr.equals("fName is not OK")){
MyDialogBox myD=new MyDialogBox(fName, "Not OK");
}
else if (resultStr.equals("lName is not OK")){
MyDialogBox myD=new MyDialogBox(lName, "Not OK");
}
/// more displaying err message...
}
};
}
my.com.server パッケージ内
import my.com.shared.Utility;
public class PostDataActionHandler implements
ActionHandler<PostData, PostDataResult> {
@Override
public PostDataResult execute(PostData action, ExecutionContext context)
throws ActionException {
String fName=action.getFName();
String lName=action.getLName();
//more geting here....//
String resultInfo="";
if(!Utility.isOKString(fName)){
resultInfo="fName is not OK";
}
else if (!Utility.isOKString(lName)){
resultInfo="lName is not OK";
}
////... more checking here///
else{
postData();
}
return new PostDataResult(resultInfo);
}
}
この構造からわかるように、共有パッケージでユーティリティを使用したとしても、同じデータを 3 回検証する必要があります。しかも重複が多い。
だから私の質問は:
特定の検証クラスを作成 (または特定の構造を設計) し、そのクラスを共有パッケージに配置して、クライアントとサーバーがそれを使用できるようにすることはできますか?