Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 在特定时间范围内有效的业务规则–;如何有序管理_Oop_Design Patterns_Business Rules_Ooad - Fatal编程技术网

Oop 在特定时间范围内有效的业务规则–;如何有序管理

Oop 在特定时间范围内有效的业务规则–;如何有序管理,oop,design-patterns,business-rules,ooad,Oop,Design Patterns,Business Rules,Ooad,我刚开始为一家政府机构工作,我遇到了一个有趣的问题:商业规则取决于立法机关,因此它们必须尊重立法机关活动的确切时间段 举个例子,如果受试者在某一日期申请了补贴,则必须根据vas在该日期有效的标准对其进行评估。对于后来申请的人来说,同样的补贴有不同的标准。 我想知道是否有一种已知的模式可以有序地处理这些依赖时间的规则。目前,代码中充斥着类似以下的表达式: if application.date>“2008年7月17日” 处理此问题的最佳方法是什么?这似乎是一个很好的例子。每个立法机构都会有处理人。

我刚开始为一家政府机构工作,我遇到了一个有趣的问题:商业规则取决于立法机关,因此它们必须尊重立法机关活动的确切时间段

举个例子,如果受试者在某一日期申请了补贴,则必须根据vas在该日期有效的标准对其进行评估。对于后来申请的人来说,同样的补贴有不同的标准。 我想知道是否有一种已知的模式可以有序地处理这些依赖时间的规则。目前,代码中充斥着类似以下的表达式:

if application.date>“2008年7月17日”


处理此问题的最佳方法是什么?

这似乎是一个很好的例子。每个立法机构都会有处理人。首先将应用程序传递给最新的处理程序。如果它太旧,它会将其传递给前立法机构的处理程序。

您可以使用一些模式。例如,使用可以在对象上创建,该对象包含在某个时间点处于活动状态的业务规则。此外,使用可以创建基于特定日期生效的业务规则。您可以将一个范围与每个策略相关联,以便决定是否应用给定的策略。这本书包含了许多适用于您的场景的模式

编辑:
我的意思是链接到模式,而不是临时属性。这可能有助于实现数据库映射。

在体系结构级别,有两种方法可以解决此问题

首先是在对数据应用业务逻辑之前,将数据ETL到仓库中。我更喜欢这种方法

但是,有时不可能做到这一点——也就是说,在将数据写入OLTP(用于填充数据仓库的源)之前,业务逻辑应用于数据,因此您别无选择。在这种情况下,该问题通常被称为快速变化的维度问题。(我在这里的假设是,您的问题中提到的数据存储在维度表中,而不是事实表中)

网络上有大量关于这个问题的信息。在这些来源中,我推荐作者的任何文章(免费)或书籍(不免费)


调和迅速变化的维度的最佳方法几乎可以肯定是特定于事实的;尽管如此,最常见的技术可能是创建一个新的维度表,该表存储根据新业务逻辑应用的数据。换句话说,在DW模式中,每个业务规则都有一个单独的维度表。

如果规则很复杂,您可能需要一个单独的维度表。我不知道您的平台存在哪些实现,但对于Java来说,典型的选择是及其应用程序。它定义了用于定义规则的特定于域的语言。注意,它可能有一个面向非java用户的接口


否则,您可以尝试类似的方法-您有一个策略列表,其中包含两种方法
appliesTo(date)
handle(data)
。您迭代列表,如果某个策略适用于某个日期,则让它处理数据。

时间属性模式对于依赖时间的数据非常有用,这也是我正在研究的问题域中的情况。@Dan。我也喜欢这种方法;首先从领域的角度解决问题。一旦你这么做了,让验证器来执行这一点应该是相对简单的。很高兴看到分析模式得到了一些提及——希望Fowler能发布第二版,并提供更多的使用示例。Cheers我猜“时态属性”需要一些调整才能与ORM一起工作,可能是计算字段?不,时态属性确实需要OODB。RDBMS很糟糕。这看起来是正确的方法,因为您可以在不修改旧处理程序的情况下添加新处理程序。