3

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

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

4

3 回答 3

2

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

您的业​​务规则是关于实体验证的,所以我想说规范模式在这里不太适合。虽然也不是不可能

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

于 2012-12-17T16:53:36.360 回答
1

动态验证规则尖叫工厂模式。我可能会走让工厂生成验证规则的路线。正如所指出的,规范旨在建立一个谓词。

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

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

于 2012-12-17T17:37:05.993 回答
0

我认为规范模式是解决这个问题的好方法。如果你还没有读过 这本书,请看看这本书。

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

于 2012-12-18T17:32:33.997 回答