使用实例变量与传递参数有什么好处?
What benefits are there to using an instance variable vs passing a parameter?
构建 类 时,我的经验法则一直是传递参数,除非调用者无法访问它们。例如,我总是喜欢这个:
class Foo
{
private FooData _data;
public Foo(FooData data) { _data = data; }
public string GetSomeValue()
{
var result = ProcessData(_data);
return result;
}
private static string ProcessData(FooData data)
{
// do something with data and return the result
}
}
关于这个:
class Foo
{
private FooData _data;
public Foo(FooData data) { _data = data; }
public string GetSomeValue()
{
var result = ProcessData();
return result;
}
private string ProcessData()
{
// do something with _data and return the result
}
}
我在野外遇到过很多次第二个例子,但我一直没有找到一个很好的理由。 访问实例变量与使用方法参数相比有哪些优点和缺点?
更新: 我意识到这个问题的一些答案可能是基于意见的,但我正在寻找一种方法可以做到而另一种方法不能做到的事情,所以我可以关于何时使用每一个形成我自己的意见。
例如:
- 第二种方法允许更短、更易读的代码。
- 第一种方法保证数据在处理时不被改变。
有关 首选不带参数的实例方法 的全面论证,请参阅 Robert C. Martin 的 Clean Code。在气味和启发式一章中,他清楚地浓缩了启发式:
F1: Too Many Arguments
Functions should have a small number of arguments. No argument is best, followed by one, two, and three.
(我的第 288 页。)
构建 类 时,我的经验法则一直是传递参数,除非调用者无法访问它们。例如,我总是喜欢这个:
class Foo
{
private FooData _data;
public Foo(FooData data) { _data = data; }
public string GetSomeValue()
{
var result = ProcessData(_data);
return result;
}
private static string ProcessData(FooData data)
{
// do something with data and return the result
}
}
关于这个:
class Foo
{
private FooData _data;
public Foo(FooData data) { _data = data; }
public string GetSomeValue()
{
var result = ProcessData();
return result;
}
private string ProcessData()
{
// do something with _data and return the result
}
}
我在野外遇到过很多次第二个例子,但我一直没有找到一个很好的理由。 访问实例变量与使用方法参数相比有哪些优点和缺点?
更新: 我意识到这个问题的一些答案可能是基于意见的,但我正在寻找一种方法可以做到而另一种方法不能做到的事情,所以我可以关于何时使用每一个形成我自己的意见。
例如:
- 第二种方法允许更短、更易读的代码。
- 第一种方法保证数据在处理时不被改变。
有关 首选不带参数的实例方法 的全面论证,请参阅 Robert C. Martin 的 Clean Code。在气味和启发式一章中,他清楚地浓缩了启发式:
F1: Too Many Arguments
Functions should have a small number of arguments. No argument is best, followed by one, two, and three.
(我的第 288 页。)