验证——数据模型唯一必须具备的功能
接下来我想谈谈数据模型可能会实现的可选特性。但在开始之前,我想先讨论每个数据模型必须具备的一个特性:验证。
完全不处理数据的数据模型几乎是不存在的。如果模型是来自文件、外部应用程序或用户界面,就有可能会引入不一致或不合法的值。来自用户界面的问题会更多,因为用户通常需要逐个字段得填写表单。
因为存在这些限制,所以不能在构造函数和属性设置器中使用异常,就像你在其他类中使用异常一样。不过可以验证接口,为错误检查提供一些灵活性。
.NET提供了一些开箱即用的验证接口,不过每个人都有自己特定的需求。
IDataErrorInfo
IDataErrorInfo接口早就可以用了,不过现在基本被弃用,因为它用起来很麻烦。让我们来看看它的属性。
string Error {get;}:这个属性有三个用途:
- 报告对象级别的错误
- 报告所有属性级别的错误
-
通过返回一个空字符串来表示不存在错误
string this[string columnName] {get;}:这个索引器属性将返回属性特定的错误。
正如你所看到的,Error属性做的事情太多了,它将所有东西都拼凑成一个字符串,从而无法区分对象级别和属性级别的验证错误。如果你重新定义它,让它只包含对象级错误,那么就无法知道对象作为整体是否包含错误。










