如何提取分配两个值的方法?

时间:2010-12-03 17:04:05

标签: refactoring

如果你的方法没有赋值,那么Extract Method(来自Fowler的书的重构)很有用。如果它分配一个值,那么它将成为提取方法的返回值。如果它分配两个值怎么办?

一些C#代码来说明:

private void someBigFunction() {
 doSomething();
 doSomethingElse();

 // start extraction here
 string first = Database.Select(...);
 // ...
 // next is dependent on the value of "first"
 int next = Database.Select(...);
 // ...
 // stop extraction here

 doMoreUselessStuff();
}

确切的代码或值在这里并不重要。重点是提取这种方法。 (这两个值是相互关联的,因此将它们放在同一个方法中是有意义的 - 而不是制作两个方法。)

这个问题的可能答案是“在一个数组中返回”,“将它们返回到一对类似的数据结构中”或“使用参数(通过引用传递)” - 但我正在寻找更干净的东西(实际代码是Delphi,而不是C#)

1 个答案:

答案 0 :(得分:0)

或许Sprout Class正是您所寻找的。创建新类的两个成员实例变量,并将此方法提取到该类中,分配实例变量并为调用者提供getter。或者,当然,您可以将局部变量转换为原始类的实例变量。这种转换经常使Extract Method变得更容易,但最终可以说是过多的实例变量。使用Sprout类,您有一个类,其唯一目的是检索并提供这些值,因此毫无疑问它们应该是其中的实例变量。