如何处理将参数传递给调用其他方法的方法?
问题描述:
首先,我对这个模糊的标题感到抱歉,我很难想出一个明确的标题来描述我的问题。随意改变你知道更好的标题。如何处理将参数传递给调用其他方法的方法?
在我的代码我经常有这样的情况:
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 });
}
}
我想证明的事情是,我通过所有的参数,每个方法,虽然有些方法并不需要所有的参数,但一些后续方法呢。
我在想你们是怎么处理这件事的。你是否创建(私有)属性?或者创建一个新的类来存储所有的属性值并传递该对象?或者就像上面的代码一样?要么... ?
答
您的陈述不完全准确,但我会尽力回答。
首先,答案是:一个方法不应该接受参数,它什么也不做。但是,如果Method1
调用Method2
,并且Method2
需要一个Method1
无法访问或生成的参数,那么它应该通过它的参数传递给Method1
。
应该给变量提供最不需要的范围。所以,除非我们谈论的是一个自然是类(公有或私有)属性的值,否则您应该坚持将私有实例从方法传递给方法。
的选项是,一般为:
- 传递值通过方法签名(给出了至少可达性,这是很好的,而且这是你在做什么)
- 暴露值的变量到所有你的方法作为类的私有成员(这是很好的,如果它是有道理的)
- 从另一个私有方法公开所有方法的值(通常需要如果需要一些处理,或者你想包装一堆的代码访问一些外部资源)
现在,检查你的语句,你写:
我传递的所有参数每个方法
这是不正确的。您只将UpdateBatch
中的4个中的3个传递给Method
,然后您只能将这3个中的2个从Method
传递到Create
。
你也状态:
即使有些方法并不需要所有的参数,但一些后续的方法做
这部分是真实的。
- 看看
Method
的方法。它需要3个参数并使用它们全部,因为如果myType.Prop
为空或空,它会调用Create
,它将接受另外两个参数。 - 看看
Create
的方法。此方法似乎采用未使用的参数someId
。由于此方法不使用someId
,因此应将其从参数列表中删除。一旦你从Create
中删除它,你也可以从Method
中删除它,因为Method
也不会使用它,除非传递给Create
。
如果该方法需要将参数传递给另一个方法,那么它*不需要它们。说它不需要它们就是不正确的。 – Servy 2014-10-27 17:46:40
顺便说一下,代码审查(http://codereview.stackexchange.com) – user469104 2014-10-27 17:47:28
也许更好,这段代码不会编译...如果你要发布代码示例,你应该发布一个工作。 – 2014-10-27 19:23:06