业务规则应该在哪里实施?

时间:2010-12-14 23:11:15

标签: design-patterns business-logic architecture

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

另外......你能否就这个问题向我推荐任何好的参考书目?

更新:

  

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

5 个答案:

答案 0 :(得分:3)

首先,您必须明确定义“业务规则”是什么。有一群候选人:

  1. 有关您产品的信息。
  2. 有关销售的规则取决于时间,地点,客户,产品,月相(也就是月份的截止日期),季节等。
  3. 用户角色(例如,普通客户与首选客户等)
  4. 应付账款和应收账款的规则
  5. GAAP规则
  6. 你到底是什么意思?这是一个模糊的问题,如果你愿意,可能会非常大。

    您可以在代码中找到更多选择:

    1. 数据驱动,存储在数据库中
    2. Rete规则引擎中的表达式。
    3. 如果您正在编写OO,则为中级课程。
    4. 如果您正在进行声明性编程,则为属性或配置文件。
    5. 可执行规则用JavaScript表示。
    6. 在您的ERP,MRP,A / P和A / R系统中。
    7. 由您的应用组成的网络服务构成。
    8. 你看到你正在打开的问题吗?你的问题意味着你有一个定义明确的问题,并期待一个简单,整洁的答案。事实是,这是一个广泛的话题。

答案 1 :(得分:1)

这是一个非常普遍的问题,很难回答 - 但我要说看看Behaviour Driven Development,将业务规则作为发展的核心。

答案 2 :(得分:1)

我建议你研究一下MVC范例 - 模型视图控制器。视图中应该没有业务逻辑,它应该都在模型中。

答案 3 :(得分:1)

答案取决于多种因素,如

  • 客户应该对规则进行更改吗?
  • 规则多久改变一次?
  • 是否应该部署更新的规则而不重新启动应用程序?

如果上述所有人都回答“是”,那么您正在寻找实施规则的规则引擎(drools,ilog等)

如果你的答案是否定的,那么另一种方法是在代码中对规则进行建模,并牢记以下

  • 将1个业务规则封装在自己的类中,以便可以对其进行独立测试,自定义和更新
  • 将规则命名为商业提及的方式(无所不在的语言)
  • 了解规范模式(domain driven design)。我认为这种表达规则的方式非常直观和明确

E.g。从here

复制
EligibleForDiscountSpecification isEligibleForDiscountRule = new EligibleForDiscountSpecification();
isEligibleForDiscountRule .IsSatisfiedBy(customer)

答案 4 :(得分:1)

业务规则最佳实践声明规则应该是可插入组件。极简主义的方法包括在专用库中对它们进行编码,然后继续使用依赖注入或反射...也许您应该调查合同驱动开发,并查看www.businessrulesgroup.org/brmanifesto.htm开始。