我认为基本上存在两种不同的方法: 命令并获取(查询)void和返回。
我经常遇到以下情况: 调用void方法(命令)。当我看到实现时,我注意到 该方法并不总是根据某些特殊条件或某些条件实际执行某些操作。
考虑以下示例:
caller.NotifyCustomer();
NotifyCustomer()
{
if(weather.IsNice || moon.IsShining)
{
return;
}
Notify();
}
我这样的代码的问题是,呼叫者显然有明确的意图:他想通知客户。
但是该方法本身并不一定总是通知客户。
我认为这令人困惑。我不会仅通过读取方法名称来期待这种行为。
我可以将方法重命名为NotifyCustomerIfApplicable
但这似乎也不是很帅。
另一种选择是在调用实际方法NotifyCustomer()
之前检查那些特殊条件,方法是在可以以前调用的单独方法中提取if评估。
但这我也不是很好。
有明确的建议吗?