使用域驱动设计时应用存储在数据库中的业务规则

时间:2012-12-17 16:48:43

标签: c# domain-driven-design

我是Domain Driven Design的新手,但是尝试将其应用到我当前的c#.net项目中。其中一个要求是允许用户为实体定义业务规则(即需要客户端名称)不同的用户组将定义他们自己的规则集,因此我将它们存储在数据库中。

我已经阅读了一些解释规范模式的文章但是有什么方法可以用它来应用存储在数据库中的规则吗?在以前的非DDD项目中,我在实体上有一个IList属性,并调用GetBrokenRules(客户端客户端)方法来加载规则并检查客户端是否有效。我是否会更好地做同样的事情而不使用规范模式?

3 个答案:

答案 0 :(得分:2)

规范模式是关于尝试通过一组搜索条件在存储库中查找实体。您可以构建一个规范,而不是定义一个很长的(可能)可选参数列表,然后将其转换为您正在使用的任何查询语言。

您的业务规则是关于实体验证的,所以我会说规范模式不适合这里。虽然it's not impossible

您建议的加载规则和调用GetBrokenRules方法的方法似乎是明智的选择。

答案 1 :(得分:1)

动态验证规则尖叫工厂模式。我可能会选择工厂生成验证规则的路线。正如所指出的那样,规范意味着建立一个谓词。

根据实现,可以动态组合规范以形成谓词,以检查属性/模型/上下文是否有效,尽管这将代表单个规则。

如果您没有,请查看FluentValidation,它非常灵活,可能会提供您未考虑过的方法。

答案 2 :(得分:0)

我认为规范模式是一个很好的方法。如果您还没有阅读,请查看this book

您应该考虑创建一个复合规范,该规范将从域服务中的数据库构建。