2011-04-09 48 views
1

我正在开发使用ASP.Net MVC 3,我将使用NHibernate的数据访问的数据驱动的Web应用程序,但我的问题是语言无关的(适用于具有异常概念所有语言)。什么是将数据完整性验证错误传播给用户的好方法/标准方法?

我得出的结论是,我更好地执行我的数据完整性规则无论是在实际的数据库和存储库实现检索上述数据,安全性和边缘的情况下提供诚信机制不够灵活。

问题

我想我也许应该说封装我IRepository实现内部验证。使用例如一个自定义MVC验证属性查询数据库进行验证坐在我心中不自然;这样的处理似乎更好地留在别的地方。

如果我执行我在IRepository实现验证,我应该怎么它传播到调用上下文?

我看到几个选项:

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

上述操作很容易实现,但它假设调用上下文想要向用户显示文本。它也使得调用上下文很难提供本地化(我认为在例外情况下我没有任何地方 - 我不喜欢在Google搜索之前尝试翻译!)。

  • 与上述相同,但不是文本消息提供ValidationException<ValidationEnum>,其中ValidationEnum是描述错误的物体模型的枚举。

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

是否有更漂亮的任何其他选项比这些?

回答

1

根据各自的体系,实现您的域名类型IDataErrorInfo可能是一种选择;这允许您在对象和对象+成员级别都指示失败,并且IIRC现在也由MVC自动处理(许多其他框架,例如winforms等已经支持这个很长时间了)。

相关问题