如何处理将参数传递给调用其他方法的方法?

问题描述:

首先,我对这个模糊的标题感到抱歉,我很难想出一个明确的标题来描述我的问题。随意改变你知道更好的标题。如何处理将参数传递给调用其他方法的方法?

在我的代码我经常有这样的情况:

public class Processor 
{ 
    public void UpdateBatch(List<myType> myTypes, int someId, Foo extra, int barId) 
    {   
     foreeach(var item in myTypes) 
     { 
     if(some condition) 
     { 
      Method(item, someId, extra); 

      // some other actions... 
     } 
     } 
    } 

    private void Method(myType, int someId, Foo extra) 
    { 
     if(string.isNullOrEmpty(myType.Prop) 
     { 
      Create(someId, extra); 
     } 
    } 

    private void Create(int someId, Foo extra) 
    { 
     var some = unitOfWork.Somes.AddObject(new Some { Prop1 = extra.Bar }); 
    } 
} 

我想证明的事情是,我通过所有的参数,每个方法,虽然有些方法并不需要所有的参数,但一些后续方法呢。

我在想你们是怎么处理这件事的。你是否创建(私有)属性?或者创建一个新的类来存储所有的属性值并传递该对象?或者就像上面的代码一样?要么... ?

+0

如果该方法需要将参数传递给另一个方法,那么它*不需要它们。说它不需要它们就是不正确的。 – Servy 2014-10-27 17:46:40

+0

顺便说一下,代码审查(http://codereview.stackexchange.com) – user469104 2014-10-27 17:47:28

+0

也许更好,这段代码不会编译...如果你要发布代码示例,你应该发布一个工作。 – 2014-10-27 19:23:06

您的陈述不完全准确,但我会尽力回答。

首先,答案是:一个方法不应该接受参数,它什么也不做。但是,如果Method1调用Method2,并且Method2需要一个Method1无法访问或生成的参数,那么它应该通过它的参数传递给Method1

应该给变量提供最不需要的范围。所以,除非我们谈论的是一个自然是类(公有或私有)属性的值,否则您应该坚持将私有实例从方法传递给方法。

的选项是,一般为:

  1. 传递值通过方法签名(给出了至少可达性,这是很好的,而且这是你在做什么)
  2. 暴露值的变量到所有你的方法作为类的私有成员(这是很好的,如果它是有道理的)
  3. 从另一个私有方法公开所有方法的值(通常需要如果需要一些处理,或者你想包装一堆的代码访问一些外部资源)

现在,检查你的语句,你写:

我传递的所有参数每个方法

这是不正确的。您只将UpdateBatch中的4个中的3个传递给Method,然后您只能将这3个中的2个从Method传递到Create

你也状态:

即使有些方法并不需要所有的参数,但一些后续的方法做

这部分是真实的。

  1. 看看Method的方法。它需要3个参数并使用它们全部,因为如果myType.Prop为空或空,它会调用Create,它将接受另外两个参数。
  2. 看看Create的方法。此方法似乎采用未使用的参数someId。由于此方法不使用someId,因此应将其从参数列表中删除。一旦你从Create中删除它,你也可以从Method中删除它,因为Method也不会使用它,除非传递给Create