我刚开始为一家政府机构工作,我遇到了一个有趣的问题:商业规则依赖于立法机构,因此它们必须尊重立法机构活跃的确切时间段。
举个例子,如果一名受试者在某个日期申请了补贴,那么他必须根据在该日期有效的标准进行评估。对于在以后申请的人来说,同样的补贴有不同的标准。我想知道是否有一种已知的模式来有序地处理这些依赖于时间的规则。目前,代码中到处都是类似以下内容的表达式:
if application.date >”July 17th, 2008”
管理此问题的最佳方法是什么?
发布于 2011-07-01 01:54:42
这看起来像是Chain of Responsibility的案例。每个立法机构都会有相应的处理程序。首先将应用程序传递给最新的处理程序。如果它太旧,它会将其传递给上一届立法机构的处理程序。
发布于 2011-07-01 02:04:11
您可以使用一些模式。例如,使用temporal property pattern,您可以创建包含在特定时间点处于活动状态的业务规则的on对象。此外,使用specification pattern,您可以创建在特定日期生效的业务规则。您可以将effective date范围与每个策略相关联,以便决定是否应用给定的策略。Analysis Patterns一书包含了许多可能适用于您的场景的模式。
编辑:我的意思是链接到temporal object模式,而不是时间属性。这可能会给实现数据库映射带来一些启发。
发布于 2011-07-13 03:44:20
如果规则很复杂,您可能需要一个(business) rules engine。我不知道您的平台有什么实现,但对于Java语言,典型的选择是Drools及其Expert subproject。它为定义规则定义了特定于领域的语言。注意,它可能有一个供非java用户使用的接口。
否则,您可以尝试像Strategy pattern这样的方法-您有一个带有两个方法appliesTo(date)和handle(data)的策略列表。您可以迭代列表,如果某个策略适用于某个日期,则让它处理数据。
https://stackoverflow.com/questions/6538929
复制相似问题