您的位置: 首頁 > 資訊 > 設計

asp.net架構設計解惑

藝術中國 | 時間: 2010-07-30 08:42:36 | 文章來源: 部落格園

而且最主要的特點就是:每個業務類包含了很多的業務驗證,狀態跟蹤等。職責很單一,便於維護和理解。

示例代碼如下:

代碼

public class Order

{

private Guid _id;

public Guid Id

{

get { return _id; }

set { _id = value; }

}

public float ShippingCost()

{

return ShippingMethod.ShippingCostTo(this.DispatchAddress, this.ItemsTotalWeight());

}

public float Total()

{

return DiscountOffer.TotalPriceWithDiscountOfferAppliedTo(

this.Items, ShippingCost());

}

public void Process()

{

if (this.CanProcess())

{

// Charge the card

Customer.Card.Charge(this.Total());

// Set the status of the order

this.Status = Status.Shipped;

// Adjust the stock levels

foreach (OrderItem item in Items)

{

item.Product.DecreaseStockBy(item.QtyOrdered);

}

else

{

throw new InvalidOrderStateForOperationException(

String.Format(

"Order {0} cannot be processed in its current state {1}",

this.Id, this.Status.ToString());

}

}

public bool CanProcess()

{

if (!this.Status == Status.Shipped &&!this.Status = Status.Cancelled)

{

return (this.HasEnoughStockFor(me.Items) &&

GetBrokenRules.Count() == 0);

}

else

{

return false;

}

}

public List GetBrokenRules()

{

List brokenRules = new List();

if (Customer == null)

brokenRules.Add(new BrokenBusinessRule()

{

Property = "Customer",

Rule = "An Order must have a Customer"

});

else if (Customer.GetBrokenRules().Count >0)

{

AddToBrokenRulesList(brokenRules, Customer.GetBrokenRules());

}

if (DispatchAddress == null)

brokenRules.Add(new BrokenBusinessRule()

{

Property = "DispatchAddress",

Rule = "An Order must have a Dispatch Address"

});

else if (DispatchAddress.GetBrokenRules().Count >0)

{

AddToBrokenRulesList(brokenRules,

DispatchAddress.GetBrokenRules());

}

// ......

return brokenRules;

}

}

上面的代碼只是Order業務類的一部分代碼,但是從代碼中可以看出,這個類中包含了很豐富的業務邏輯。例如,在Process方法中,處理了下面的流程:

1.調用CanProcess 方法來進行下面的驗證:

a.Order的是否處於合適的可以被處理的狀態

b.在Order中訂購的物品是否有足夠的庫存

2.customer用戶給這個order付款。至於怎麼付款,這個邏輯就包含在了card類中。

3.然後,對産品的庫存進行更新。

可以看出,採用Domain Model方式很適合來來組織複雜的業務邏輯,而且代碼也很容易閱讀和理解(如果在加上重構)。

3.總結

通過上面的一些分析和解釋,不知道大家是否現在已經清楚:之前提出的問題如何解決。

一個建議就是:不要太形式化,根據項目的實際情況來。這句話可以使相當於廢話,但是很多的情況確實是這樣的,DDD不是萬能的,Transaction Script和Active Record也有它們的優勢,合適就好。

謝謝各位!

   上一頁   1   2   3   4  


相關文章
注:凡註明 “藝術中國” 字樣的視頻、圖片或文字內容均屬於本網站專稿,如需轉載圖片請保留 “藝術中國” 浮水印,轉載文字內容請註明來源藝術中國,否則本網站將依據《資訊網路傳播權保護條例》維護網路智慧財産權。
列印文章    收 藏    歡迎訪問藝術中國論壇 >>
發表評論
用戶名 密碼
 
尚無評論

留言須知