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
Design patterns 将业务规则与业务流程分离_Design Patterns_Architecture_Aop_Business Logic Layer - Fatal编程技术网

Design patterns 将业务规则与业务流程分离

Design patterns 将业务规则与业务流程分离,design-patterns,architecture,aop,business-logic-layer,Design Patterns,Architecture,Aop,Business Logic Layer,如何从业务流程外部化业务规则,以便在不涉及业务流程逻辑的情况下添加规则 例如,我有两个业务流程,比如“添加产品”和“更新产品”,这两个流程共享一些通用规则,以后可以继续添加这些规则。我打算编写一次业务流程,它执行特定流程的所有可用规则,如果没有抛出异常,则继续成功完成业务流程 我不打算使用规则引擎,因为我认为这对于我的体系结构来说可能太重了 感谢和问候, 这个问题的答案比我在这里写的要复杂得多。这涉及到数据关系、安全性、策略原则和业务/行业的管理约束等方面的科学 如果你的意思没有“商业规则”和“

如何从业务流程外部化业务规则,以便在不涉及业务流程逻辑的情况下添加规则

例如,我有两个业务流程,比如“添加产品”和“更新产品”,这两个流程共享一些通用规则,以后可以继续添加这些规则。我打算编写一次业务流程,它执行特定流程的所有可用规则,如果没有抛出异常,则继续成功完成业务流程

我不打算使用规则引擎,因为我认为这对于我的体系结构来说可能太重了

感谢和问候,

这个问题的答案比我在这里写的要复杂得多。这涉及到数据关系、安全性、策略原则和业务/行业的管理约束等方面的科学


如果你的意思没有“商业规则”和“商业政策”那么模糊,我可能会误解你的问题。

这些问题相当广泛,因此我将按照一般模式回答

在许多情况下,我所做的是定义流程,以便在流程的适当阶段插入一些“守门员”活动。这些守门员中的每一个都负责执行特定的业务规则子集。因此,例如,一个这样的活动可能会强制执行数据质量。另一个可能会根据业务规则做出路由决策。另一种定价。等等


实际规则本身位于工作流外部,可以独立于工作流进行修改。诀窍是约束规则评估的“过程结果”,以便可以继续拥有可预测(和可测试)的过程

您可以使用许多技术将规则从流程中分离出来。在某种程度上,您正在从业务流程的各个点调用“方法”。然后,这个问题就变成了一种机制,通过这种机制可以在不改变业务流程本身的情况下修改该方法

可以将该方法打包到它自己的库(dll、jar或其他什么)中,并用新版本替换该jar。更改库,更改业务规则

可以用从数据库获得的可配置参数来表示方法中的逻辑。更改数据库,更改业务规则

如果复杂性足够高,您会发现您已经实现了自己的规则引擎

在某种程度上,使用现有的规则引擎比重新发明这个轮子更有效


要获得更详细的建议,您需要告诉我们更多您正在做的事情。

规则引擎有什么问题?问题是有效的,但是提出-1的人,您能展示您的脸并就这个问题的问题发表评论吗?对于有效的问题,我给出+1。我的应用程序域不需要具有多个参数的非常复杂的规则,这取决于上下文等。因此我觉得规则引擎将成为架构上的一个膨胀。您使用哪种语言来实现这一点?例如,AspectJ提供了强大的功能,而.NETAOP解决方案似乎没有那么强大。James感谢您的评论。我正在使用.Net(C#)。