设计模式可根据某些规则过滤数据

时间:2018-07-03 11:24:38

标签: design-patterns

我需要根据某些规则过滤数据。例如,我有一个记录列表,另一方面,我有一组规则。每个规则都会过滤掉该列表。我还在维护这些规则的配置文件。这些规则可以通过配置文件打开/关闭。

例如,考虑我的配置文件。

in MySQL server 
DATEDIFF is built in function
You can get Difference of 
Day
Month
Year

SELECT DATEDIFF(DAY,'2018-05-01',GetDate())
SELECT DATEDIFF(Month,'2018-05-01',GetDate())
SELECT DATEDIFF(Year,'2018-05-01',GetDate())

使用此文件,可以轻松插入或拔出规则。我已经检查了责任链的规范,但还是很困惑是否要这样做!有人可以建议我一个合适的设计模式来实现这一目标吗?或者是否有满足此需求的框架?

1 个答案:

答案 0 :(得分:1)

如果规则是累积性的,责任链似乎是开销。
您不需要在链中链接规则,也不需要链/继任者/链的概念。
您需要的是基本的:迭代器模式。您在规则列表的每个元素上进行迭代,并根据它们的状态(启用或未启用)来执行规则。
当然,每个具体规则都必须从基类派生而来,并且要以统一的方式进行操作。

现在,如果规则不是累积性的,而是关于规则执行的排他性,并且您需要在候选规则之间设置特定顺序,那么责任链就很有意义。