我刚刚调试了一些如下所示的代码:

string someValue = _snuh.FindItem(id).Value;

我想检查FindItem()的返回值(它返回一个Foo),所以我将代码分成两行:
Foo foo = _snuh.FindItem(id);
string someValue = foo.Value;

这让我可以在调试器中查看foo;当代码都在一行时,我不能做的事情。
现在我已经完成了调试,我应该把代码放回原来的样子,还是留两行呢?

最佳答案

而不是像这样一行字

string someValue = _snuh.FindItem(id).Value;

我宁愿重构为
string someValue = _snuh.FindItemValue(id);

并将FindItem()和随后的Value解引用封装在函数中。
为什么?第一个解决方案公开了FindItem返回的对象的实现(即它有一个Value字段)。Law of Demeter表示第二种变体。此外,如果你必须在很多地方这样做,它可以避免重复。如果必须执行空检查,则只需执行一次。

09-11 01:18