使用实例变量与传递参数有什么好处?

时间:2015-05-06 19:41:37

标签: c# design-patterns

在构建类时,我的经验法则一直是传递参数,除非调用者无法访问它们。例如,我总是喜欢这个:

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

我在野外多次遇到第二个例子,我从来没有找到一个好理由。 访问实例变量与使用方法参数有什么好处和缺点?

更新:我意识到这个问题的一些答案可能是以意见为基础的,但我正在寻找一种方法可以做的事情,而另一种方法则不能这样我可以形成自己的意见何时使用每一个。

例如:

  • 第二种方法允许更短,更易读的代码。
  • 第一种方法可确保在处理时不会更改数据。

1 个答案:

答案 0 :(得分:2)

对于更喜欢不带参数的实例方法的综合论据,请参阅Robert C. Martin的Clean Code。在 Smells and Heuristics 章节中,他明确地浓缩了启发式:

  

F1:参数太多

     

函数应该包含少量参数。没有争论是最好的,其次是一,二,三。

(我的副本中的页面288。)