【发布时间】:2011-09-26 17:37:59
【问题描述】:
如果您使用继承并将所有公共代码和属性放入基类中,则在 Action 类之间共享代码很容易。作为最佳实践,我认为经验法则是prefer composition over inheritance。不过,我发现将这个概念应用于 Action 类非常困难。也许我做得不对。
例如,我有 3 个不同的 Action 类。它们都处理用户注册的不同方式(用户可以从多个表单注册)它们最终都调用相同的服务方法并且需要以相同的方式处理错误。通用代码类似于:
public class RegisterAction1 {
public String execute() {
...Leaving out code here....
try {
registrationService.register(user);
} catch (BusinessException e) {
if(e.getErrors().containsKey("someError3)){
return "Case1";
}
else if (e.getErrors().containsKey("someError1")) {
session.put(Constants.SESSION_REGISTERVO, registerVO);
return "Case2";
} else if(e.getErrors().containsKey("someError2")) {
this.addFieldError("aliasName", this.getText("some.error"));
} else if(ce.getErrors().containsKey("someError3")) {
this.someFieldThatMustBeSetForView1 = true;
this.someFieldThatMustBeSetForView2 = true;
this.addFieldError("addressLine1", null);
this.addFieldError("addressLine2", null);
this.addFieldError("city", null);
}
}
...Leaving out code here....
return "Success";
}
}
要使用组合,我认为您会将这段逻辑移动到“Helper”类中,并在 Action 类中引用该 Helper。如果您要在实现此公共代码的此帮助程序类中创建一个“callService”方法,您将如何处理很多代码实际上正在修改类上的字段这一事实......即,您是否传递了对像下面这样的辅助方法的动作?如果是这样,您如何处理它可能是三个不同动作类之一(即 RegisterAction1、RegisterAction2、RegisterAction3)的事实?
public String callService(RegisterAction1 registerAction) {
【问题讨论】:
标签: java design-patterns struts2