【问题标题】:Method paratemers refactoring in software-design软件设计中的方法参数重构
【发布时间】:2016-04-22 19:26:12
【问题描述】:

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

String bikeName;
Wheel wheel1;
Wheel wheel2;

在lots方法中一起使用,例如

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

根据软件设计,最好将代码重构为具有此字段和方法的 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


}

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

secondMethod(Bike bike, int someSpeed )...

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

【问题讨论】:

  • 不清楚你想要达到什么。给定的示例令人困惑,并且问题包含一些难以理解的错误。

标签: architecture refactoring software-design


【解决方案1】:

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

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

或者沿着这些路线,无论如何。

【讨论】:

  • 你好,Achim )) 谢谢,但是很抱歉,你没有完全理解这个问题。正如我所说,我当然知道默认值方法。 HERE 的要点之一是,您可能没有调用 secondMethod(Bike bike, int knownPower) where knownPower in an independent variable (from Bike) ,因为那时,用户甚至代码创建者)) 可以(错误地)调用 (anyBike, anyValue),这会出错,因为 value 与 `bike.getRearWheel().getPower()` 无关。软件设计也必须防止此类错误。
  • 我只回答了在这种情况下我会做什么的问题。这就是被问到的。到底编程指南只能做到这么多。您无法预测或防止错误使用。方法的用户必须确保他/她知道它的作用。
猜你喜欢
  • 2013-06-22
  • 2023-03-29
  • 2011-08-16
  • 2021-01-06
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 2011-05-17
  • 1970-01-01
相关资源
最近更新 更多