假设我正在创建一个名为SomeLibrary的类。这个类有一个Calculate方法,它接受一个参数——SomeClass的一个实例。
class SomeLibrary
{
void Calculate(SomeClass argument)
{
//Some algorithm...
//argument's value is changed!
argument.value = 3;
}
}
Calculate的结果是一个经过修改的SomeClass。如何通知用户?我看到两个解决方案:
- 返回SomeClass而不是void-在这种情况下,参数仍在修改中,但这次它也被返回。不利的一面是,用户可能不希望参数被修改,也许他需要在修改之前保留它的版本
- 在Calculate中,可以对参数进行深入复制,并返回此参数。然而,创建深度副本并不总是一项简单的任务
你怎么看?
如果你愿意接受OOP,你需要与突变共存。也就是说,你给出了一个东西的例子,通常人们会认为它会发生变异。这没有问题。
除非你自己的医生说相反的话,否则突变是可以的。否则,您可能需要查看"自动映射器"。