编写不带参数且有副作用的方法,更改对象状态或采用参数并处理它的单参数方法是否更好?如果第二种选择更可取,最好是显式返回输入参数还是只处理它,因为调用者应该有一个引用它。
更确切地说:我正在处理XML并阅读了Clean Code book的第一章我试图将Big Processing方法分成许多小方法,所以这个方法可以像故事一样阅读,以下几行:
cleanHeader();
extractMetaInfo();
appendStuff();
等等,这些方法都在作为成员存储的XML文档上运行。
恕我直言,减少参数计数与没有副作用的最佳做法似乎在这里相互矛盾。写下面会更好吗?doc = cleanHeader(doc);
doc = extractMetaInfo(doc);
doc = appendStuff(doc);
在这个问题上有明确的“权利”吗?一个明确的答案依赖于多少背景?或者有没有第三种选择我没想过?
编辑:发现一个related question的答案相互矛盾。注意详细说明?
答案 0 :(得分:1)
如果您的algothimen可以被多个线程并行使用,那么干净的代码簿中建议的方式(statfull但没有参数)将不起作用。在这种情况下,您必须使用参数方式!
答案 1 :(得分:0)
我会从OO设计的角度来论证这一点。如果你有一堆操作在同一个对象上的方法,比如doc,那么你可能需要一个包装该对象的类,并将该行为封装到一个bigProcessingMethod()中,调用你希望进一步打破任务的较小处理方法
公共类DocUtil { 私人字符串doc;
public DocUtil(String doc)
{
this.doc = doc;
}
public bigProcessingMethod()
{
cleanHeader(doc);
extractMetaInfo(doc);
appendStuff(doc);
}
//等。 }
我误解了你的问题。我没有意识到你已经在像DocUtil这样的包装器类中。
无论是否将doc变量显式传递给每个处理方法,您都在相同的内存位置处理相同的对象。我每次传递它的唯一原因是要明确这些是适用于变量doc的方法。
这取决于你。