是否可以定义NHibernate.Validator将使用的验证方法(用于业务规则验证)? 我的意思是EntLib中存在的东西:
[HasSelfValidation()]
public class SomeClass
{
//...
[SelfValidation()]
public virtual void DoValidate(ValidationResults results)
{
//...
}
}
答案 0 :(得分:3)
是的,可以这样做 - 但是在验证错误的情况下,您将错过一种方式来传达有关违反哪些规则的更多信息。
据我所知,NHibernate Validator只提供指定文本消息的能力,类的名称,以及 - 在属性级别验证属性的情况下 - 违反属性的名称。如果您的属性HasSelfValidationAttribute
实施IRuleArgs
指向IValidator
(或IInitializableValidator
),则除了简单string Message
之外,它无法回复任何其他内容和类的名称,如果您的要求是验证“真实的业务规则”,则可能信息太少。
NHibernate Validator非常适合用于类的属性的简单验证,但是当您需要进行更复杂的验证时,它很简单。
答案 1 :(得分:0)
看看The RulesEngine Project。您的业务对象不必使用任何属性进行修饰,也不必实现任何接口......