问题标签 [business-rules]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - 当它是属性可访问性时,如何测试业务规则?
这是问题所在。我有一个业务对象,它有一个名为RegisterDate
. 像往常一样的业务规则说,一旦设置,就无法更改。
我首先想到的是将此字段实现为属性并将设置器定义为受保护的,以防止用户在创建对象后使用(和设置)它。但是经过一段时间的思考,我让我在属性可访问性规则中偷偷摸摸了一条业务规则。
我的第二个想法是让属性设置器公开,在设置时实现一个异常,这使得业务规则非常明确。将有一个测试用例,期望该属性在每次有人尝试设置它时抛出异常。
好吧,但这是避免行为的很多样板,为什么不毕竟保护事物,避免在代码的其他部分甚至滥用?但是后来我想知道,如果另一个开发人员不小心更改了属性可访问性并再次将其公开,并且业务对象的用户开始使用该字段违反业务规则怎么办?
这种情况的最佳方法是什么?你会如何解决这个问题?
documentation - 免费的“业务规则”工具?
我的任务是在我的公司经常使用的遗留程序中捕获业务规则。
当我即将开始时,我启动了 Excel 并开始打字。只花了很短的时间就意识到如果有一个定制的工具可以输入这些信息会更好。
这对我来说是一项新任务,所以我不知道我是否希望获得不存在或昂贵的软件。但我想问问外面的人是否知道一个不错的免费工具可以输入业务规则,这并没有什么坏处。
drools - Guvnor 规则编码
我在 Excel 中有一个 Drools 决策表,规则中使用的一些字符串有“Á”字符。当我从这个决策表在 Guvnor 中构建规则包时,我在规则源中得到错误的字符。
例如,
在电子表格中 -> Área de Lazer|POR,
在内置的 drl 文件中 -> �rea de Lazer|POR
在这种情况下,有什么方法可以调整 Guvnor 以支持 UTF-8?有没有人遇到过类似的问题?
谢谢
@Geoffrey De Smet
你好,
我在 ExcelParser.java 中添加了以下代码:
我已经从 git-hub 成功构建了 drools 项目,但是当我尝试使用 maven 2.2.1 或 maven 3.0.3 构建 guvnor-webapp 来测试它时,我得到了同样的错误:
[错误] 致命错误 [信息] ------------------------------------------ ------------------------------ [信息] org/apache/commons/io/IOUtils org.apache.commons.io。 IOUtils [INFO] ---------------------------------------------- -------------------------- [INFO] 在 org.codehaus 跟踪 java.lang.NoClassDefFoundError: org/apache/commons/io/IOUtils。 mojo.gwt.AbstractGwtMojo.checkGwtUserVersion(AbstractGwtMojo.java:289) at org.codehaus.mojo.gwt.AbstractGwtMojo.getGwtUserJar(AbstractGwtMojo.java:251) at org.codehaus.mojo.gwt.shell.CompileMojo.compile(CompileMojo. java:268) 在 org.codehaus.mojo.gwt.shell.CompileMojo.doExecute(CompileMojo.java:255) 在 org.codehaus.mojo.gwt.shell.AbstractGwtShellMojo.execute(AbstractGwtShellMojo.java:119) 在 org.apache .maven.plugin.DefaultPluginManager。org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:556) 的 org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:556) 的 executeMojo(DefaultPluginManager.java:490) .maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:535) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:387) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java :348) 在 org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328) 在 org.apache.maven 的 org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:180)。DefaultMaven.execute(DefaultMaven.java:138) 在 org.apache.maven.cli.MavenCli.main(MavenCli.java:362) 在 org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:60)在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method .invoke(Method.java:597) 在 org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315) 在 org.codehaus.classworlds.Launcher.launch(Launcher.java:255) 在 org.codehaus.classworlds。 org.codehaus.classworlds.Launcher.main(Launcher.java:375) 上的 Launcher.mainWithExitCode(Launcher.java:430) 原因:java.lang。ClassNotFoundException: org.apache.commons.io.IOUtils at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader. java:190) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:307) 在 org.codehaus.classworlds.RealmClassLoader.loadClassDirect(RealmClassLoader.java:195) 在 org.codehaus.classworlds.DefaultClassRealm.loadClass(DefaultClassRealm.java :255) 在 org.codehaus.classworlds.DefaultClassRealm.loadClass(DefaultClassRealm.java:274) 在 org.codehaus.classworlds.RealmClassLoader.loadClass(RealmClassLoader.java:214) 在 java.lang.ClassLoader.loadClass(ClassLoader.java: 248)URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java :307) 在 org.codehaus.classworlds.RealmClassLoader.loadClassDirect(RealmClassLoader.java:195) 在 org.codehaus.classworlds.DefaultClassRealm.loadClass(DefaultClassRealm.java:255) 在 org.codehaus.classworlds.DefaultClassRealm.loadClass(DefaultClassRealm. java:274) 在 org.codehaus.classworlds.RealmClassLoader.loadClass(RealmClassLoader.java:214) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:248)URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java :307) 在 org.codehaus.classworlds.RealmClassLoader.loadClassDirect(RealmClassLoader.java:195) 在 org.codehaus.classworlds.DefaultClassRealm.loadClass(DefaultClassRealm.java:255) 在 org.codehaus.classworlds.DefaultClassRealm.loadClass(DefaultClassRealm. java:274) 在 org.codehaus.classworlds.RealmClassLoader.loadClass(RealmClassLoader.java:214) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:248)findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at org.codehaus.classworlds.RealmClassLoader.loadClassDirect(RealmClassLoader.java:195) at org.codehaus.classworlds.DefaultClassRealm.loadClass (DefaultClassRealm.java:255) 在 org.codehaus.classworlds.DefaultClassRealm.loadClass(DefaultClassRealm.java:274) 在 org.codehaus.classworlds.RealmClassLoader.loadClass(RealmClassLoader.java:214) 在 java.lang.ClassLoader.loadClass(类加载器.java:248)findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at org.codehaus.classworlds.RealmClassLoader.loadClassDirect(RealmClassLoader.java:195) at org.codehaus.classworlds.DefaultClassRealm.loadClass (DefaultClassRealm.java:255) 在 org.codehaus.classworlds.DefaultClassRealm.loadClass(DefaultClassRealm.java:274) 在 org.codehaus.classworlds.RealmClassLoader.loadClass(RealmClassLoader.java:214) 在 java.lang.ClassLoader.loadClass(类加载器.java:248)DefaultClassRealm.loadClass(DefaultClassRealm.java:274) at org.codehaus.classworlds.RealmClassLoader.loadClass(RealmClassLoader.java:214) at java.lang.ClassLoader.loadClass(ClassLoader.java:248)DefaultClassRealm.loadClass(DefaultClassRealm.java:274) at org.codehaus.classworlds.RealmClassLoader.loadClass(RealmClassLoader.java:214) at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
对此的任何帮助将不胜感激!
谢谢!
PS 我已阅读自述文件,并按照描述进行。
validation - CQRS 中的业务规则验证器和命令处理程序
我是 CQRS 的新手,我想了解写入端(域)内的业务规则验证。我知道客户端验证应该根据有效日期(必填字段、字符串长度、有效电子邮件等)进行,业务规则/业务域相关验证应该在域端进行。实际上,同样的客户端验证规则也应该应用于域中的命令,因为我们不信任用户。
因此,我们有一个有效的命令 (AddEmailToCustomer),并且在该命令上调用了命令处理程序。这是我的验证方法。
- 在命令处理程序中创建两个命令验证器的实例。
- 第一个验证与客户端验证相同的命令数据(必填字段、有效电子邮件等)
- 第二个验证器根据第二个验证器内的逻辑验证数据。诸如“此客户是否活跃”之类的东西,或者其他什么。我知道不断变化的电子邮件不适合这里,但这并不重要。重要的是这里有一个业务验证。
- 我们查看 Validator.Validate(ICommand cmd) 返回的 ValidationResult 发现有错误
- 我们不会让存储库中的客户调用 AR 上的 UpdateEmail 方法。那么此时我们该怎么做呢?
我是否在命令处理程序中抛出异常并在那里添加这些错误?我是否将命令发送到错误队列或其他地方?我是否会回复 Bus.Reply 之类的内容并返回错误代码?如果是这样,我该如何处理错误消息?如何将这些错误传达给用户?我知道我可以稍后通过电子邮件发送给他们,但在 Web 场景中,我可以在命令中发送请求 ID(或使用消息 ID),并使用请求 ID 轮询响应并向用户显示错误消息。
感谢您的指导。
谢谢
rule-engine - 需要分配或解决问题以理解规则引擎
我想通过实际使用它来更好地理解规则引擎。有人可以建议我一些没有规则引擎应该很难解决的任务或问题陈述。我计划使用 WWF (Windows Workflow Foundation) 规则引擎进行分配。
java - 了解 drools-guvnor
可能重复:
访问drool guvnor的java代码
任何人都可以通过提供一个示例来提供帮助,其中在 Java 代码中调用规则(在 .drl 文件中提到)并进行处理(使用 Drools-Guvnor)?
我之前试图理解 drools 的尝试是理解 Drools guvnor 的工作,在那里我了解了它的基本功能,但我想通过一个例子来学习它的完整工作方式,说明我们如何将 drools-guvnor 合并到 java 程序中
提前致谢
java - 使用 BPEL 进行部署流程
我正在开发一个类似于业务规则引擎的系统。规则在开发环境中编写、执行(生成 SQL 代码)并在 DEV 中测试,然后将它们部署到生产环境中,以便用户可以按需执行它们并从中创建报告。部署过程涉及几个步骤和检查,例如:
- 获取业务规则的 XML 定义
- 验证 DEV 中使用的所有“规则字典”标准,是否存在于生产中(这是针对“字典”Web 服务完成的)
- 在 prod 中首次执行每个规则(这是通过“规则执行”Web 服务完成的)
- 验证生产中的某些计数和 KPI 数字是否在一定范围内......(再过 4 个步骤)
我对 BPEL 很陌生,我想知道 BPEL 是否适合自动化此流程?或者是矫枉过正?如果没有,你有什么建议自动化这个?
谢谢!
entity-framework-4.1 - 关于将业务规则合同应用于实体框架中的实体的建议
在一位同事的帮助下,我们想出了一种将业务规则应用于实体的方法。我们正在向实体注入定义规则的合同。虽然这本身很好用,但 Entity Framework 并不喜欢它。原因是我们在基础实体的构造函数中引入了一个参数。EF 不喜欢参数化构造函数,这是有充分理由的。下面是一些演示合约的代码:
我知道您可以通过流畅的 API 将一些验证直接应用于实体的属性,但这似乎与持久性相关而不是与我相关的业务。例如,在数据方面,我们假设描述列可以是 255 个字符,但业务需要只允许 100 个字符。我们可以在创建数据库/模型的过程中定义初始持久性相关的属性。我真的很喜欢合同的想法,但看不到它与实体框架一起使用。我唯一的另一个想法是让合同(或商务舱)位于实体和 EF 之间。我的 DAL 会将实体传递给业务规则类,如果一切正常,则将它们传递给我的服务,反之亦然。我希望有人在适用于实体的业务规则方面有比这更好的方法
c# - c# 中的规则引擎设计和示例
我目前正在用 c# 编写一个 .net 应用程序,并希望检查一些规则,并根据规则通过或失败执行操作。因此,我希望实现一个通用的解决方案,我可以按照良好的 oop 原则重复使用。这使我得出结论,我需要编写一个规则引擎。
我对 c# 有很好的了解,但这是我第一次需要编写规则引擎,因此作为我对此类引擎的设计和开发研究的一部分,我正在寻找有关创建此类引擎的任何提示。如果有我可以查看的任何示例,那么还有什么更好的呢?任何 c#/.net 规则引擎应用程序?典型的 3 层架构中的哪一层应该这样驻留?我快速浏览了 codeplex 和 google 代码,但没有人向我跳出!所以一些方向会很棒。
rule-engine - 决策表的替代方案
我们的应用程序正在迅速增长。所以,我开始研究业务规则,作为将我们的一些逻辑与代码分开的一种方式(big DAAAH ;)。主要目标是允许我们的业务人员编辑和部署规则而无需重新编译任何东西(另一个大 DAAAH)。到目前为止,我只能找到对“决策表”的引用,作为企业管理规则的一种方式。问题是我试图将决策表的概念引入我们的业务并得到一个非常“混合”的回应,至少可以说:) 简而言之,他们不想理解它们。问题:是否有决策表的替代方案?对销售人员来说更容易理解的东西?