java设计问题:如何将验证检查重构为另一个方法
我有一个巨大的验证方法,我想重构它。这里有一个例子。我已经提供了初步的验证,以及我自己的建议。你认为这是一个很好的重构方法还是有更好的重构方法
谢谢
public void validate() {
MyException myException= new MyException();
try {
if (!isRule1()) {
throw MyException.invalidRule(Rule1);
}
}
catch (MyException e) {
myException.addWrappedException(e);
}
try{
f (!isRule2()) {
throw MyException.invalidRule(Rule2);
}
}
catch (MyException e) {
myException.addWrappedException(e);
}
////continue checking...
}
下面是我想要如何重构它们:
public void validate() {
MyException myException= new MyException();
validateRule1(myException);
validateRule2(myException);
//continue validating....
}
private void validateRule1(myException){
try {
if (!isRule1()) {
throw MyException.invalidRule(Rule1);
}
}
catch (MyException e) {
myException.addWrappedException(e);
}
}
private void validateRule2(myException){
try {
if (!isRule2()) {
throw MyException.invalidRule(Rule2);
}
}
catch (MyException e) {
myException.addWrappedException(e);
}
}
# 1 楼答案
试一试怎么样
或
其中checkRule1()返回异常或null,addWrappedException忽略null
或
# 2 楼答案
一定要从
Replace Method with Method Object
开始。这没有风险,你也不应该用这么大的方法来害怕。那么你的方法似乎很好。。。只需确保重命名validateRule1
;)# 3 楼答案
你可以在这里使用装饰图案。创建一个具有单个方法validate()的接口,然后创建实现此接口的不同类,该接口包含验证代码。然后可以对构建的对象调用validate,这将通过所有其他验证展开
这还可以提高代码的模块性,使您能够独立地对验证进行单元测试。您还可以根据需要从链中轻松添加或删除验证
下面是一个简单的例子