数据验证的设计模式


23

解决此问题的最佳设计模式是什么:

我有一个对象A。可以根据用户请求在数据库中注册或删除对象A。

在注册或删除对象之前执行数据验证。在注册对象之前,有一组规则需要检查,而另一组规则则是删除。这些规则中的一些对于这两种操作都是通用的。

到目前为止,我认为“ 责任链”设计模式最合适,但我在实施它时遇到了麻烦。


6
您为什么认为“责任链”设计模式最合适?
亚当·祖克曼

Answers:


17

通常,我将使用单独的验证器类来验证每个用例。例如,在将产品添加到数据库之前,我将使用AddProductValidator来验证业务规则,在删除产品之前,我将使用DeleteProductValidator进行验证,等等。可以将通用业务规则提取到规范类(Specification pattern)并由验证器类共享

要构建验证器类,请按以下方法进行:http : //lostechies.com/jimmybogard/2007/10/24/entity-validation-with-visitors-and-extension-methods/

如果您使用.NET,我认为您可能需要考虑Fluent验证(https://github.com/JeremySkinner/FluentValidation)。我认为这很酷,也很接近我上面提到的文章


1
Fluent验证的新网址:github.com/JeremySkinner/FluentValidation
Brij

4

如前所述,我可能会实现一个option type。这样,我可以返回“ None”或经过验证的值(可能很懒惰),但这是实现的详细信息,并且很好地引出了使用Decorator的想法。

装饰图案

当然,如果界面变得丑陋,我会使用外观


Decorator可以工作,但是我通常认为Decorator模式是要将输出转换为输入以供其他类使用时要使用的东西。在这种情况下,您只需进行验证即可。我认为责任链可能会更好,恕我直言。
尼尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.