日期:2009-07-03  浏览次数:20422 次

业务外观和业务规则干什么?


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的应用呢?)


(以小见大,抛砖引玉)