将规则引擎集成到域驱动程序设计中的好方法是什么? 举个例子:如果我有一个通用的速率限制服务,那就是
似乎有3个聚合:资源,事件,限制。但是,评估用户的限制需要收集用户执行的所有(a)事件,(b)所有资源,(c)所有限制,然后评估规则。所以这个规则引擎'组件需要保持有关所有聚合的知识。
设计它的一种方法是拥有一个规则引擎" Saga"每个请求/用户,收集聚合中的所有信息并评估规则。有人可以提出另一种设计吗?
P.S 我正在使用Akka,所以上面的设计非常适合演员每次请求。
答案 0 :(得分:1)
另一种方法是保持你的规则引擎"不知道任何特定的聚合,而是保持所有数据相关。
您可以传递所需的"参数"到规则引擎来评估给定的"表达式#34;或"方法"各种各样的。例如:
方法:"速率限制器" 参数:
规则引擎会使数据返回所需的响应。
这些是广泛的。我为保险公司实施了类似的措施,以根据与各种产品相关的许多规则来确定保费。
我正在开发一个开源版本,但我没有足够的时间来完成,但也许有一些想法:https://github.com/Shuttle/Shuttle.Abacus
答案 1 :(得分:0)
假设您有一个应用程序并且需要限速:
应将速率限制视为另一个有界上下文。它可能有两个方面:
RetryAfter: 10 seconds
或Remaining: 99
。验证限制取决于您的体系结构。例如,如果您使用API网关和微服务,则对于每个操作(ad view
,ad click
),API网关会根据速率限制微服务检查请求。
P.S。我不能给你一个通用的答案,这取决于每个用例。