鉴于 System.Windows.Input.ICommand 作为 2 个主要方法:
interface ICommand {
void Execute(object parameters);
bool CanExecute(object parameters);
...
}
我希望 CanExecute(...) 在调用 Execute(...) 之前在命令支持的框架中被调用。
但是,在我的命令实现内部,是否有任何理由在我的 Execute(...) 实现 中添加 CanExecute(...) 调用?
例如:
public void Execute(object parameters){
if(!CanExecute(parameters)) throw new ApplicationException("...");
/** Execute implementation **/
}
这在我的测试中变得很重要,因为我可能会模拟一些接口(interface)来支持 CanExecute,并且在测试 Execute 时必须做同样的模拟。
对此有什么设计思路吗?
最佳答案
程序员是出了名的懒惰,他们会调用Execute
而不先调用CanExecute
。
ICommand
接口(interface)更常与 WPF 绑定(bind)框架一起使用,但它是一种非常强大且有用的模式,可以在其他地方使用。
我立即从 Execute
方法调用 CanExecute
来验证对象的状态。它有助于减少重复逻辑并强制使用 CanExecute
方法(为什么要竭尽全力确定他们是否可以调用方法而不费心强制执行它?)。我没有发现多次调用 CanExecute
有什么问题,因为无论如何它应该是一个快速操作。
不过,如果 CanExecute
方法返回 false
,我总是记录调用 Execute
方法的结果,以便消费者知道后果.
关于c# - ICommand - 我应该在 Execute 中调用 CanExecute 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6984257/