<button id="g4keu"></button>
  • <rt id="g4keu"><acronym id="g4keu"></acronym></rt>
  • 您的位置: 首頁 > 資訊 > 設計

    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  


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

    留言須知

    主站蜘蛛池模板: 国产自产拍精品视频免费看| 久久怡红院亚欧成人影院 | 日本三级欧美三级人妇视频黑白配| 久久久精品2019免费观看| 成年人免费视频观看| 两个漂亮女百合啪啪水声| 好吊操视频在线| 亚洲一区二区三区高清| 国产乱子伦在线观看| 狠狠色噜噜狠狠狠狠av| 亚洲情xo亚洲色xo无码| 日本精高清区一| 国产在线观看一区二区三区四区| 黄色毛片在线观看| 午夜久久久久久久| 欧美日韩亚洲国产一区二区综合| 久久综合久久综合久久| 少妇被躁爽到高潮无码人狍大战| 80s国产成年女人毛片| 国产伦理一区二区| 污污动漫在线观看| 久久99国产乱子伦精品免费| 女人扒下裤让男人桶到爽| 国模欢欢炮交150视频| 国产亚洲福利一区二区免费看| 4480新视觉yy理论片| 国产精品成人亚洲| 美女无遮挡拍拍拍免费视频| 女人张开腿无遮无挡图| 中文字幕日韩精品一区二区三区 | 天天躁日日躁狠狠躁av中文 | 中文字幕专区高清在线观看| a级毛片免费播放| 女人pp被扒开流水了| 国产一级淫片免费播放电影| 韩国三级女电影完整版| 免费无码一区二区三区| 日韩人妻无码免费视频一区二区三区| 公和我做好爽添厨房| 最新黄色网址在线观看| 99re国产精品|