我有一个带有公共方法的类,它接受一些参数,如:
Process方法需要调用不同的私有方法来实际处理数据。是不是更好地传递所有参数或者我应该使用字段来向私有方法提供信息?
// Variant 1: Parameters
public void Process(string param1, string param2, int param3)
{
processStep1(param1, param2, param3);
processStep2(param1, param2);
processStep3(param1, param2, param3);
}
// Variant 2: Fields
public void Process(string param1, string param2, int param3)
{
m_Param1 = param1;
m_Param2 = param2;
m_Param3 = param3;
processStep1();
processStep2();
processStep3();
}
在我看来,变体1的优点是没有副作用(方法不能改变字段的值)。如果涉及单元测试,它可能会有优势,因为它更容易测试特定功能。
变体2对我来说更加清晰。您不必传递任何参数,如果需要,可以更改字段的内容。
有明显的赢家吗?两种方法都有效,何时使用哪种方法?
答案 0 :(得分:2)
从你的问题描述中我可以说Variant 1是一个明显的赢家,因为正如你所正确认定的那样,它比Variant 2更具优势。副作用和可测性是很重要的因素。
我补充说Variant 2是一种全局状态并且不必要。为什么要在对象中不需要方法使用的成员变量?它是一个什么样的对象?你有其他使用这些成员变量的方法吗? 变体1为每个步骤提供了清晰的界面,您不会陷入访问参数中不可用的其他状态的陷阱。
如果构造函数初始化函数进程所需的成员变量并且仅用于此Process方法,则我只选择Variant 2。