[英]How to avoid passing one variable from one method to another
我正在重构一些旧的Java代码,我想知道是否有更好的方法来重构以下代码
private void createControlPanel() {
int row = 0;
row = initSessionControls(controlPanelGB, row);
row = initBidControls(controlPanelGB, row);
row = initSnapshotControls(controlPanelGB, row);
}
在每种方法中,行都会递增。 在我看来,这很丑。 我也不想做以下事情
private void createControlPanel() {
row = initSessionControls(controlPanelGB, 1);
row = initBidControls(controlPanelGB, 2);
row = initSnapshotControls(controlPanelGB, 3);
}
关于如何最佳重构的任何建议? 我正在使用Java 8。
我建议使用ControlPanelFiller
类:
class ControlPanelFiller {
private final ... controlPanel;
private int row = 0;
public ControlPanelFiller(... controlPanel) {
this.controlPanel = controlPanel;
}
public ControlPanelFiller initSessionControls() {
...
++row;
return this;
}
public ControlPanelFiller initBidControls() {
...
++row;
return this;
}
public ControlPanelFiller initSnapshotControls() {
...
++row;
return this;
}
}
private void createControlPanel()
{
ControlPanelFiller cpf = new ControlPannelFiller(controlPanelGB);
cpf.initSessionControls()
.initBidControls()
.initSnapshotControls();
}
您可以尝试以下代码
private void createControlPanel() {
int row =0;
row += initSessionControls(controlPanelGB);
row += initBidControls(controlPanelGB);
row += initSnapshotControls(controlPanelGB);
}
您对这个代码感到不舒服是正确的。 似乎每个被调用的方法都知道要处理的下一行是什么,因此它们紧密耦合,并且用于确定下一行的逻辑分布在多个方法中。 嗯 如果下一行确实比上一行大1,那么最好在createControlPanel
方法中集中此逻辑:
private void createControlPanel() {
int initialRow = 0;
initSessionControls(controlPanelGB, initialRow);
initBidControls(controlPanelGB, initialRow+1);
initSnapshotControls(controlPanelGB, initialRow+2);
}
这比上面的第二个解决方案更清楚,因为很明显第二个参数是一行,以及它与初始行值的关系。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.