向用户传播数据完整性验证错误的好/标准方法是什么?

本文关键字:标准 方法 是什么 传播 用户 数据完整性 验证 错误 | 更新日期: 2023-09-27 17:49:28

我正在使用ASP开发一个数据驱动的web应用程序。asp.net MVC 3。我将使用NHibernate进行数据访问,但我的问题是语言无关的(适用于所有具有异常概念的语言)。

我已经得出结论,我最好在实际的数据库和存储库实现中执行我的数据完整性规则来检索所述数据,以保证安全性和提供的完整性机制不够灵活的边缘情况。

我想我可能应该封装我的IRepository实现中说的验证。例如,使用自定义MVC验证属性来查询数据库进行验证,在我看来是不自然的;这种处理似乎最好留给其他地方。

如果我在IRepository实现中执行验证,我应该如何将其传播到调用上下文?

我看到一些选项:

  • 用类似ValidationException的东西子类化Exception(或者如果它已经存在)。提供USER FRIENDLY消息作为message属性。

上面的代码很容易实现,但是它假设调用上下文想要向用户显示文本。这也使得调用上下文很难提供本地化(我认为这在例外情况下没有位置-我讨厌在谷歌搜索之前尝试翻译!)。

  • 与上面相同,但是提供ValidationException<ValidationEnum>而不是文本消息,其中ValidationEnum是描述主题模型错误的Enum。

这允许调用上下文完全自由地解释错误。我倾向于使用这种方法,尽管它会用大量的枚举值污染代码。

还有比这些更漂亮的选择吗?

向用户传播数据完整性验证错误的好/标准方法是什么?

根据体系结构,在域类型上实现IDataErrorInfo可能是一种选择;这允许你在对象和对象+成员级别指示失败,并且IIRC现在也由MVC自动处理(许多其他框架,如winforms等已经支持此功能多年)。