1

我为这个问题道歉,因为它相当模糊,并且集成了几个问题,但由于它们密切相关,我不想将它们分成几个提交。

我目前正在考虑如何测试应用程序中的配置错误。有不同的选项可用,之前使用过的一个是 IDataErrorInfo 接口。我对这个实现的外观不是很满意,不是因为它不起作用,而是因为我不完全同意实际的实现。我一直在搜索这个站点(所有 52 个相关问题)和其他站点,以了解为什么 Microsoft 决定将关键字“this”与索引一起使用是个好主意。它通常用于对集合中的项目进行索引,即使是强硬的人也可以将我实现的类视为错误的集合,我并不真正同意“this[]”关键字应该隐式地用于测试它们。(边注:这是否意味着自定义集合类不能有自己的配置错误?)为什么这不是像“TestErrorState(string propertyname)”这样的方法调用,甚至不是索引属性?以及“字符串错误{get;”的频率是多少?}”实际使用过吗?对我来说,它看起来像是一种“黑客”,而且不太容易使用。

由于此实现,我确实遇到的一个实际问题是我有与其他对象相关的对象,我希望错误状态能够传播。这很丑陋,因为用户界面中显示的类应该处于“错误状态”,因为相关对象不一定向用户显示(除非用户单击界面上的选项并将“向下移动” ”对象层次结构中的一级)。这意味着我需要用我自己的方法来扩展错误模式的测试来传播这些错误,然后我开始质疑我是否应该只实现一些完全不同的东西而不是使用 IDataErrorInfo 接口。

请让我知道在哪里可以找到一些关于 IDataErrorInfo 为何如此的好信息。如果你能给我一个很好的想法,让我知道如何让错误模式通过对象层次结构传播,这将是非常棒的!当我说传播时,我并不是说作为一个例外,因为这感觉像是一个事件,只是当一个对象被询问配置错误时,它还应该询问它的所有孩子是否有错误,然后也传递孩子的错误消息。

4

2 回答 2

3

接口的成员IDataErrorInfo通常在接口本身之外没有任何意义,因为您几乎不想自己以这种方式请求实体的验证错误。该IDataErrorInfo界面旨在供 MVC 和 WPF 等 UI 技术使用。

因为不需要调用Error属性或this[string]直接IDataErrorInfo成员通常可以显式实现。这可以防止它们出现在类本身上,并允许您自己实现自己的 - 更有用的 -this[]索引器。

我同意在该接口上使用索引器可能不是最好的设计,但IDataErrorInfo无论如何设计时都可能考虑到显式实现,所以这并不重要。

这是一个如何IDataErrorInfo显式实现的示例。

于 2010-11-01T10:07:37.127 回答
1

我不确定您是否正在使用 MVVM,但它看起来像。我同意这this[]对实施施加了额外不必要的限制,而它本来可以是一个GetError(string propetyName). 我认为这是一个 COM 后遗症,这个接口是通过 COM 暴露出来的,但会检查并确认。

在实践中,我从未发现 this[] 导致任何问题。这几乎永远不会在集合中实现,因为集合的绑定通常会使用 ObservableCollection 并且只会实现单个项目IDataErrorInfo

如果您有一个层次结构(例如客户和订单),您通常会为两者实现一个视图模型,并且订单视图模型将引用其父客户视图模型,以便它可以传播错误。我有过的场景,这种方法总是有效的。如果您有特定问题,请发布新问题或更新您的问题。

于 2010-10-26T12:02:21.717 回答