业务外观和业务规则干什么?
Duwamish 7业务逻辑分为两层业务外观和业务规则,那为什么要分为两层呢?他们干什么的?
业务外观
// Fill in data for the OrderSummary table of OrderData
//
summaryRow[OrderData.TAX_FIELD] = orderRules.CalculateTax(order);
summaryRow[OrderData.SHIPPING_HANDLING_FIELD] = orderRules.CalculateShipping(order);
summaryRow[OrderData.TOTAL_FIELD] = subTotal +
(Decimal)(summaryRow[OrderData.SHIPPING_HANDLING_FIELD]) +
(Decimal)(summaryRow[OrderData.TAX_FIELD]);
他为我们展现了,在定单系统中要包含那些元素,如:TAX_FIELD,SHIPPING_HANDLING_FIELD,TOTAL_FIELD等等,这些是要给web层来显示的。但是我们依旧不知道Tax是怎么算出来得,这就需要业务规则层来处理:
业务规则
public Decimal CalculateTax(OrderData order)
{
ApplicationAssert.CheckCondition(order != null, "order is required", ApplicationAssert.LineNumber);
Decimal taxRate = new Decimal(10.0);
Decimal orderTax = (Decimal)order.Tables[OrderData.ORDER_SUMMARY_TABLE].Rows[0][OrderData.SUB_TOTAL_FIELD];
return Decimal.Round (orderTax / taxRate, 2);
}
这样我们就知道怎样算Tax了,是不是很好?但是为什么要这样呢?继续……
如果有一天你发现算Tax的方法要变了(要增税什么的!!),是不是改一下CalculateTax就OK了呢?试想一下如果将业务外观和业务规则合并有什么后果(如果你写的是类似Amazon.com的应用呢?)
(以小见大,抛砖引玉)