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