方法paratemers在软件设计中进行重构

时间:2016-04-21 07:47:57

标签: architecture refactoring software-design

我想这个问题适用于任何OO语言。 根据软件设计指南(1),字段(=这里的变量),方法参数列表中的内容,让它成为例如

String bikeName;
Wheel wheel1;
Wheel wheel2;

一起用于批次方法,例如

firstMethod(String bikeName, Wheel wheel1, Wheel wheel2) ...
secondMethod(String bikeName, Wheel wheel1, Wheel wheel2) ...

根据softwaredesign,最好重构代码以使用这个字段的Class Bike和方法:

firstMethod(Bike bike)
secondMethod(Bike bike)

此操作非常简单,甚至可以通过一键式点击重构功能自动完成任何代码。

考虑一下这个案例,firstMethod在他的身体中有以下内容:

firstMethod(Bike bike){

Wheel rwheel = bike.getRearWheel();
int somePower = rwheel.getPower(); //whatever

secondMethod(bike);
}


secondMethod(Bike bike){
...
Wheel rwheel = bike.getRearWheel();
// or even:
int somePower = rwheel.getPower(); //whatever


}

但在secondMethod中,bike.getRearWheel()或更多rwheel.getSpeed()再次被称为 。 为了不再调用相同的方法两次(也就是软件设计指南),可以将方法改为

secondMethod(Bike bike, int someSpeed )...

但这可能会变得很麻烦,特别是在变量丢失的实际情况下,并且违反了指南(1)。 你会在实践中选择什么变量?

1 个答案:

答案 0 :(得分:0)

指南不是解决方案,不能涵盖所有情况。我的(严格个人)建议是按以下方式尝试:

firstMethod(Bike bike){
    ... // other stuff
    int somePower = bike.getRearWheek().getPower();
    ...
    secondMethod(bike, somePower);
    ...
}

然后定义:

secondMethod(Bike bike){
    secondMethod(bike, -1);
}

secondMethod(Bike bike, int knownPower){
    ...
    int somePower = (knownPower < 0)? bike.getRearWheel().getPower() : knownPower;
    ...
}

或者沿着这些方向,无论如何。