我刚刚调试了一些如下所示的代码:
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表示第二种变体。此外,如果你必须在很多地方这样做,它可以避免重复。如果必须执行空检查,则只需执行一次。