关于业务规则
按照对DDD的理解,一般使用规约模式实现内禀的业务规则。但有些业务规则可以体现为对其他聚合的查询。
而对仓储的调用一般都放在应用层,而这样会造成部分业务逻辑散落在应用层。请问大家有没有好的办法处理?
附上一个订单系统例子,当用户提交订单后,应用层的处理流程如下:
1、开启一个事务
2、调用account的仓储按照account id查询并返回相应的account对象
3、调用Order的工厂方法,创建一个新的Order对象
4、调用下单的业务方法并将account与order对象传进去
5、该方法返回成功后,保存并提交。结束事务。
以上过程中,下单相关的检查(业务规则)一般写在业务方法或order的工厂方法中(使用规约模式? or not)
现在我们新增一些业务规则,1、下单时需要检查要购买的商品是否有货 2、按该商品的类型检查是否享受折扣
增加之后,应用层的处理流程改变如下:
1、开启一个事务
2、调用account的仓储按照account id查询并返回相应的account对象
3、调用商品的仓储按照商品名或id查询并返回相应的商品对象
4、调用折扣信息的仓储按照该商品的类型查询并返回布尔值
5、调用Order的工厂方法,创建一个新的Order对象
6、调用下单的业务方法并将account与order对象传进去
7、该方法返回成功后,保存并提交。结束事务。
从以上例子来看,这些可以使用仓储条件查询实现的业务规则如何放到Domain层去?有没有好的方法可以提高?谢谢!
[该贴被admin于2014-05-09 06:23修改过]