我想这个问题适用于任何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)。 你会在实践中选择什么变量?
答案 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;
...
}
或者沿着这些方向,无论如何。