2016-04-21 43 views
0

我想这个问题适用于任何OO语言。 根据软件设计原则(1),场(这里=变量),什么样的方法参数列表中走到一起,让它成为例如方法paratemers重构软件设计

String bikeName; 
Wheel wheel1; 
Wheel wheel2; 

在很多方法一起使用,例如

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

根据softwaredesign,是较好重构代码为具有类自行车与此字段和方法:

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

准则不是解决方案,不能涵盖所有情况。我(仅限本人使用)的建议是尝试如下:

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; 
    ... 
} 

或沿着这些线路,反正。

+0

Hallo,Achim)) 谢谢,但很抱歉,您没有完全理解这个问题。 正如我所说,我知道关于defalut-values方法的源头。 **这里的**点之一是,您可能没有在这里打电话 'secondMethod(自行车自行车,int knownPower)' where已知**在独立**变量(来自自行车), 因为那么,一个用户甚至一个代码创建者))可能(错误地)调用(anyBike,anyValue),并且这会运行错误,因为_value_不是'bike.getRearWheel()。getPower()'相关的。 软件的设计也必须防止这种错误。 –

+0

我只回答了我在这种情况下会做什么的问题。那是被问到的。最终的编程指南只能实现这么多。您无法预测或防止不正确的用法。方法的用户必须确保他/她知道它做了什么。 –