She*_*tin 15 c# wpf command design-patterns
鉴于System.Windows.Input.ICommand为2个主要方法:
interface ICommand {
void Execute(object parameters);
bool CanExecute(object parameters);
...
}
Run Code Online (Sandbox Code Playgroud)
我希望在调用Execute(...)之前在Command支持的框架中调用CanExecute(...).
但是,在我的Command实现的内部,是否有任何理由在我的Execute(...)实现中添加CanExecute(...)调用?
例如:
public void Execute(object parameters){
if(!CanExecute(parameters)) throw new ApplicationException("...");
/** Execute implementation **/
}
Run Code Online (Sandbox Code Playgroud)
这在我的测试中变得相关,因为我可能会模拟一些支持CanExecute的接口,并且在测试Execute时必须执行相同的模拟.
对此有何设计想法?
众所周知程序员是懒惰的,他们会在Execute没有CanExecute先打电话的情况下打电话.
该ICommand接口更常用于WPF绑定框架,但它是一种非常强大且有用的模式,可以在其他地方使用.
我CanExecute立即从Execute方法调用以验证对象的状态.它有助于减少重复逻辑并强制使用该CanExecute方法(为什么要经历所有努力,无论他们是否可以调用方法而不是强制执行它?).我没有看到CanExecute多次调用的问题,因为无论如何它应该是一个快速操作.
但是,Execute如果CanExecute方法返回false,我总是记录调用方法的结果,以便消费者知道后果.