企业应用中常常涉及到校验规则和业务规则。泛而言之,所有的规则都可以称之为业务规则,但是有必要在其中区分出校验规则这个概念。从业务规则的作用范围来看,一些业务规则是关于单个领域对象自身属性的,往往是简单的、断言式的,目的是保证领域对象的正确性;而另外一些业务规则是关于多个领域对象协作的,往往包含比较复杂的判断逻辑,目的是保证业务逻辑的正确性。为便于描述,我把第一类称为校验规则,第二类称成为业务规则。
校验规则的例子有:
一张订单的“客户姓名”不能为空
一张发票的“金额”必须大于零
订单上的“签订日期”必须在“发货日期”之前
业务规则的例子有:
一张订单的状态必须是“签定”时,才能进行更新库存的操作
一张订单的“金额”必须大于1000元的时候才能进行优惠
一张订单的“金额”大于2000元时,就要开两张发票
区分出这两个概念之后,就比较容易确定在企业应用中实施这些规则的地方。
表示层 <<-- 校验规则
|
|
业务层 <<-- 业务规则
|
|
数据访问层 <<-- 校验规则
在表示层实施校验规则的目的有两个,一是能够在校验后给用户一个反馈,使之有改正输入错误的机会,二是在把领域对象交给业务层操作之前保证其正确性。
在业务层实施业务规则是为了完成业务逻辑。
在数据访问层实施校验规则是在持久化之前保证领域对象的正确性。
如果能够把对领域对象的校验工作分离出来,做成一种基础性的服务,以一种统一方式进行实施,就可以让开发者专注于实现业务规则,提高开发效率,这个问题还需要进一步考虑。
校验规则的例子有:
一张订单的“客户姓名”不能为空
一张发票的“金额”必须大于零
订单上的“签订日期”必须在“发货日期”之前
业务规则的例子有:
一张订单的状态必须是“签定”时,才能进行更新库存的操作
一张订单的“金额”必须大于1000元的时候才能进行优惠
一张订单的“金额”大于2000元时,就要开两张发票
区分出这两个概念之后,就比较容易确定在企业应用中实施这些规则的地方。
表示层 <<-- 校验规则
|
|
业务层 <<-- 业务规则
|
|
数据访问层 <<-- 校验规则
在表示层实施校验规则的目的有两个,一是能够在校验后给用户一个反馈,使之有改正输入错误的机会,二是在把领域对象交给业务层操作之前保证其正确性。
在业务层实施业务规则是为了完成业务逻辑。
在数据访问层实施校验规则是在持久化之前保证领域对象的正确性。
如果能够把对领域对象的校验工作分离出来,做成一种基础性的服务,以一种统一方式进行实施,就可以让开发者专注于实现业务规则,提高开发效率,这个问题还需要进一步考虑。