如果你的方法没有赋值,那么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#)
答案 0 :(得分:0)
或许Sprout Class正是您所寻找的。创建新类的两个成员实例变量,并将此方法提取到该类中,分配实例变量并为调用者提供getter。或者,当然,您可以将局部变量转换为原始类的实例变量。这种转换经常使Extract Method变得更容易,但最终可以说是过多的实例变量。使用Sprout类,您有一个类,其唯一目的是检索并提供这些值,因此毫无疑问它们应该是其中的实例变量。