我正在使用ASP.Net MVC 3开发一个数据驱动的Web应用程序。我将使用NHibernate进行数据访问,但我的问题是语言无关(适用于所有具有异常概念的语言)。
我得出的结论是,为了提供完整性机制不够灵活的安全性和边缘情况,我在实际数据库和存储库实现中更好地执行数据完整性规则来检索所述数据。
问题
我在想我应该将所述验证封装在我的IRepository实现中。例如,使用自定义MVC验证属性来查询数据库进行验证在我看来是不自然的;这种处理似乎更适合其他地方。
如果我在IRepository实现中执行验证,我应该如何将其传播到调用上下文?
我看到了几个选项:
Exception
(或者如果已存在)对ValidationException
进行子类化。提供USER FRIENDLY消息作为Message属性。上面的内容很容易实现,但它假定调用上下文要向用户显示文本。它也使调用上下文难以提供本地化(我相信在异常中没有位置 - 我讨厌在谷歌搜索之前尝试翻译!)。
ValidationException<ValidationEnum>
的短信,其中ValidationEnum
是描述主题模型错误的枚举。这允许调用上下文完全自由地解释错误。我倾向于这种方法,即使它用大量的枚举值污染了代码。
除了这些更美观之外还有其他选择吗?
答案 0 :(得分:1)
根据体系结构,在您的域类型上实施IDataErrorInfo
可能是一种选择;这允许你在对象和对象+成员级别指示失败,而IIRC现在也由MVC自动处理(许多其他框架,例如winforms等已经支持这个年龄)。