提问人:你看看那段代码,如果让你优化,你会怎么做?
@Override
protected void setTotalUIState(int intOpType) throws Exception {
super.setTotalUIState(intOpType);
if (!isSelfMake()) {// 如果不为自制单据
ButtonObject btnObj = null;// 按钮对象
btnObj = getButtonManager().getButton(IBillButton.CopyLine);
if (btnObj != null)
btnObj.setEnabled(!isSelfMake());// 设置复制行不可用
btnObj = getButtonManager().getButton(IBillButton.PasteLine);
if (btnObj != null)
btnObj.setEnabled(!isSelfMake());// 不为空,设置粘贴行不可用
updateButtons();// 更新当前按钮栏上的所有按钮
}
}
之前准备的时候,都是深入了解各大功能的代码实现,对于这个界面的UI类代码,也顶多是浏览一下,能懂就懂,认真思考还是不懂的代码就放过,所以对于这个提问,对我来说还是相当的吃惊的。当时我认真的把代码看了一遍,发现在外层判断是否自制单据后,在里层还做了两次的判断,完全没有必要多次一举。所以灵机一动直接把里层的判断干掉。代码成了这个样子。
@Override
protected void setTotalUIState(int intOpType) throws Exception {
super.setTotalUIState(intOpType);
if (!isSelfMake()) {// 如果不为自制单据
ButtonObject btnObj = null;// 按钮对象
btnObj = getButtonManager().getButton(IBillButton.CopyLine);
if (btnObj != null)
btnObj.setEnabled(false);// 设置复制行不可用
btnObj = getButtonManager().getButton(IBillButton.PasteLine);
if (btnObj != null)
btnObj.setEnabled(false);// 不为空,设置粘贴行不可用
updateButtons();// 更新当前按钮栏上的所有按钮
}
}
但是当时正值正午十二点左右,我饿的头昏眼花,智商降低到零下两百五,思考不来,是否可以确定把判断函数换成false就是正确无误的。所以,当时我的代码修改成的样子是这样的,比较保险。
@Override
protected void setTotalUIState(int intOpType) throws Exception {
super.setTotalUIState(intOpType);
boolean isSelfMake = isSelfMake();
if (isSelfMake) {// 如果不为自制单据
ButtonObject btnObj = null;// 按钮对象
btnObj = getButtonManager().getButton(IBillButton.CopyLine);
if (btnObj != null)
btnObj.setEnabled(isSelfMake);// 设置复制行不可用
btnObj = getButtonManager().getButton(IBillButton.PasteLine);
if (btnObj != null)
btnObj.setEnabled(isSelfMake);// 不为空,设置粘贴行不可用
updateButtons();// 更新当前按钮栏上的所有按钮
}
}
提问人:你看if语句里面的代码有些地方是相似的,是否还可以抽象出一个方法出来?
当时我还没有重构的意识,更没有做过代码重构的事情,所以并不能很好的理解他们的意图,于是把那几行代码剪切出来放在一个自己新定义的函数里面,然后在原来的代码里调用这个方法。我想当时他们应该是要让我气急败坏了,一直恨铁不成钢的逼问着我,外层if语句里面那几行代码不是很相似么?我们抽象出方法的目的是什么?虽然这会儿我都答对了,可是我还是不能做出他们想要的结果。直到那位长发飘飘的大哥指着银屏上的代码问我如下几行代码有那些不同的地方的时候,我才恍然大悟。
ButtonObject btnObj = null;// 按钮对象
btnObj = getButtonManager().getButton(IBillButton.CopyLine);
if (btnObj != null)
btnObj.setEnabled(isSelfMake);// 设置复制行不可用
btnObj = getButtonManager().getButton(IBillButton.PasteLine);
if (btnObj != null)
btnObj.setEnabled(isSelfMake);// 不为空,设置粘贴行不可用
最后我顿悟了,代码应该是下面的样子,不过当时现场,他一句这个也过的时候,我已经没有机会当场写给他们看了。
@Override
protected void setTotalUIState(int intOpType) throws Exception {
super.setTotalUIState(intOpType);
if (!isSelfMake()) {// 如果不为自制单据
setButtonsEnabled(IBillButton.CopyLine);
setButtonsEnabled(IBillButton.PasteLine);
updateButtons();// 更新当前按钮栏上的所有按钮
}
}
private void setButtonsEnabled(int billButton) {
ButtonObject btnObj = null;// 按钮对象
btnObj = getButtonManager().getButton(billButton);
if (btnObj != null) {
btnObj.setEnabled(false);
}
}
分享到:
相关推荐
改善既有的代码重构(ppt),改善既有的代码重构,改善既有的代码重构PPT
代码重构 重构与模式
《代码重构》书籍的中文版电子版,软件开发者必读书籍。 重构——改善既有代码的设计(中文版)
代码重构
JAVA 代码重构 JAVA 代码重构 JAVA 代码重构 JAVA 代码重构 JAVA 代码重构
java代码重构经验分享
代码重构技术
技术素养导向的电气CAD课程多维重构初探.pdf
代码重构的指导书籍以及设计模式的一些简介
Java代码重构示例 Java代码重构示例 Java代码重构示例 Java代码重构示例 Java代码重构示例 Java代码重构示例 Java代码重构示例
重构_改善既有代码的设计这本电子书介绍了代码重构的知识,为什么要重构,以及是如何重构等
高仿微信,iOSAppTemplate代码重构
优秀的程序员,应该懂得代码重构,写出更加优美和逻辑清晰的代码
讲述了java代码的重构总结 规范代码,有必要好好学习
Java 代码 重构 实例 指南 ,欢迎下载
重构是持续改进代码的基础。抵制重构将带来技术麻烦:忘记代码片段的功能、创建无法测试的代码等等。 而有了重构,使用单元测试、共享代码以及更可靠的无BUG的代码这些最佳实践就显得简单多了。 《31天重构速成》该...
java代码重构
Java设计模式+代码重构等PDF合集,Java设计模式+代码重构等PDF合集,Java设计模式+代码重构等PDF合集,Java设计模式+代码重构等PDF合集
重构是迅速发现并修复有问题的代码的一种高效的方式。在《代码重构(C#&ASP.NET版)》中首次提供了在c#和asp.net中进行重构的专业方法,您将学习如何运用重构技术管理和修改代码。此外,还将学习如何从头开始构建原型...