2010-12-14 77 views
0

1)它们是否应该在模块中通过任何一套方法实现? 2)他们是否应该在一个特殊的类中实现,每个方法都测试一个特定的业务规则?业务规则应该在哪里实施?

另外...你能推荐我关于这个问题的任何好的参考书目吗?

UPDATE:

“业务规则是一个企业,公司或企业的规则,这是定义或约束业务的某些方面始终解析为真或假的规则。” Wikipedia definition.

回答

3

首先,您必须对“业务规则”有什么清晰的定义。有一批候选人:

  1. 有关您的产品的信息。
  2. 有关销售的规则取决于时间,地点,客户,产品,月相(即月份的截止日期),季节等。
  3. 用户角色(例如,正常客户或优先客户等)
  4. 规则周围应付账款和应收
  5. GAAP规则

你到底是什么意思?这是一个模糊的问题,如果你愿意,它可能会很大。

  1. 数据驱动的,存储在数据库中
  2. 表达式在Rete算法规则引擎:

    他们去哪里在你的代码有很多的选择,因为到。

  3. 如果您正在编写面向对象的中间层类。
  4. 属性或配置文件,如果你正在做声明性编程。
  5. 用类似JavaScript的东西表达可执行规则。
  6. 在您的ERP,MRP,A/P和A/R系统中。
  7. 面向您的应用程序组合在一起的Web服务。

你是否看到你开放的问题?你的问题意味着你有一个明确的问题,并期待一个简单,整洁的答案。事实是,这是一个广泛的话题。

+0

其实你向我展示了知道不同可能性的重要一步......这部分是我期待的! – JPCF 2010-12-15 14:52:00

+0

我现在使用维基百科陈述的定义...也许你可以相应地更新你的答案。 – JPCF 2013-10-24 16:38:35

+0

“商业规则是商业,公司或公司的规则” - 无非就是一种重言式。看看维基百科的含义。 – duffymo 2013-10-24 18:35:49

1

这是一个相当普通的问题,很难回答 - 但我要说看看Behaviour Driven Development作为开发的心脏保持业务规则的一种方式。

1

我建议你研究MVC范式 - 模型视图控制器。视图中不应该有商业逻辑,它应该都在模型中。

+0

关注焦点回答。我没有谈论视图层。我只询问任何必须验证业务规则的业务组件...... – JPCF 2010-12-14 23:41:09

+0

我不确定它是否“不专心” - 该范例描述了一个设计,其中任何“业务组件”都将是一个独立模型,因此很容易测试。 – Arafangion 2010-12-15 00:16:18

+2

在我看来,过分简单化。不是玩具的系统很少适合所有的逻辑,如此整齐地放在少数物体中。 – duffymo 2010-12-15 15:26:14

1

问题的答案取决于多种因素,如

  • 客户应修改规则?
  • 规则多久改变一次?
  • 是否应该更新规则而不重新启动应用程序?

如果答案为是所有这些正上方,然后规则引擎(Drools的,ILOG等)是你在找什么来实现你的规则

如果你的答案为否,则另一种方法是,以模型中的代码记住下面保持

  • 封装1业务规则在其自己的类的规则,以便它可以进行独立测试,定制和更新
  • 名称开展业务的方式提到它的规则(通用语言)
  • 了解指定模式(domain driven design)。我认为这种表达规则的方式非常直观和明确

E.g.复制自here

EligibleForDiscountSpecification isEligibleForDiscountRule = new EligibleForDiscountSpecification(); 
isEligibleForDiscountRule .IsSatisfiedBy(customer) 
+1

你认为什么时候应该使用规范模式?什么时候不用它? – JPCF 2010-12-15 15:17:34

1

业务规则最佳做法声明规则应该是可插入组件。最简单的方法是将其编码到专用库中,然后继续使用依赖注入或反射...也许您应该对Contracts Driven Development进行调查,然后查看www.businessrulesgroup.org/brmanifesto.htm开始。