当您设置一个属性的值时,您可以在更新内部值之前或之后进行验证。
如果之前进行验证,如果新值无效,您可能会引发异常。然后该对象始终处于有效状态。
如果之后进行验证,则需要撤消(即通过IEditableObject),因此用户可以随时取消编辑。我们还可以选择在这里抛出异常或通过IDataErrorInfo暴露错误。
如果在设置之前进行验证,我认为IDataErrorInfo没有意义。有些人可能会争辩说在验证场景中不保证抛出异常。
在自定义对象包含在 BindingList 中并设置为网格的数据源的情况下,验证后的效果很好。
在网格之前验证也可以,但是您必须抛出异常才能向数据网格发出属性值设置失败的信号(无需大量额外代码)
我对实现IEditableObject和IDataErrorInfo、INotifyPropertyChanged等的域对象也不满意。它使域对象充满了额外的担忧。但是,如果您想很好地使用数据绑定,这似乎是不可避免的。我可以创建一个包装器,也许是 DTO,但我并不太热衷于编写大部分虚拟的额外代码来支持这些数据绑定位。
您如何验证对象(最好在数据绑定和 UI 的上下文中)?