天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

代碼協(xié)定中的固定條件和繼承

  固定條件

  一般來說,固定條件就是一種在給定的上下文中始終為 true 的條件。 應(yīng)用于面向?qū)ο蟮能浖r,固定條件指示一種針對類的各個實例始終為 true 的條件。 固定條件是一種強大的工具,每當(dāng)給定類的任何實例的狀態(tài)失效時,它都會及時通知您。 換言之,固定條件協(xié)定正式定義據(jù)以推測類的實例處于良好狀態(tài)的條件。 雖然聽起來很重要,但這只是在通過類對業(yè)務(wù)域建模時要先了解后實施的第一個概念。 域驅(qū)動設(shè)計 (DDD) 是目前用于為復(fù)雜業(yè)務(wù)方案建模的成熟方法,而且可在設(shè)計時為固定條件邏輯分配一個重要位置。 實際上,DDD 極力建議您永遠都不要處理處于無效狀態(tài)的類的實例。 同樣,DDD 還建議您編寫返回有效狀態(tài)的對象的類的工廠,并且您的對象在每次操作后都以有效狀態(tài)返回。

  DDD 是一種方法,協(xié)定的實際實施應(yīng)該由您來完成。 在 .NET Framework 4 中,代碼協(xié)定可最大限度地減少您的工作量,有效幫助您成功地進行實施。 我們來更詳細(xì)地了解一下 .NET Framework 4 中的固定條件。

  固定條件邏輯在哪里?

  固定條件是否在某種程度上與優(yōu)秀的對象建模和軟件設(shè)計有關(guān)? 深入了解域至關(guān)重要。 深入了解域自然會指導(dǎo)您找到您的固定條件。 有些類根本不需要固定條件。 從根本上說,缺乏固定條件并不是一種警告信號。 對應(yīng)該包含什么內(nèi)容以及應(yīng)該執(zhí)行什么操作沒有限制的類就沒有固定條件。 如果這是您的分析得出的結(jié)果,那么再好不過了。

  假定有一個類代表要發(fā)布的新聞。 該類可能有標(biāo)題、摘要和發(fā)布日期。 此處的固定條件在哪里? 這取決于業(yè)務(wù)域。 發(fā)布日期是必需的嗎? 如果是,則您應(yīng)該確保新聞始終有有效日期,而“有效日期”的定義也來源于上下文。 如果日期是可選的,則您可以保存一個固定條件,并確保先驗證屬性的內(nèi)容,然后再將該屬性應(yīng)用于要在其中使用它的上下文中。 標(biāo)題和摘要也可以以同樣的方式處理。 既沒有標(biāo)題也沒有內(nèi)容的新聞是否有意義? 如果這在您正在考慮的業(yè)務(wù)方案中有意義,則您有一個無固定條件的類。 如果沒有意義,則要準(zhǔn)備好添加幾項檢查,以防標(biāo)題和內(nèi)容為空。

  更常見的情況是,無任何行為且充當(dāng)松散關(guān)系數(shù)據(jù)的容器的類可能缺乏固定條件。 如有疑問,我建議您對該類的每個屬性都問問“我是否可以在這里存儲值?”,而不需要考慮屬性是公用的、受保護的還是私用的(只要是通過方法設(shè)定的)。 這樣做應(yīng)該有助于具體了解您是否會遺漏模型的要點。

  與設(shè)計的許多其他方面一樣,如果在設(shè)計過程的早期查找固定條件,則會更富有成效。 在開發(fā)過程的晚期添加固定條件始終都是可行的,但這樣做會增加您在重構(gòu)方面的成本。 如果要這樣做,則必須小心,當(dāng)心回歸。

  代碼協(xié)定中的固定條件

  在 .NET Framework 4 中,類的固定條件協(xié)定是對該類的任何實例始終應(yīng)為 true 的條件的集合。 向類中添加協(xié)定時,前置條件用于在該類的調(diào)用程序中查找錯誤,而后置條件和固定條件則用于在類及其子類中查找錯誤。

  您需要通過一個或多個專用的方法來定義固定條件協(xié)定。 這類方法是實例方法,它們是私有的,返回 void 且有特殊屬性(ContractInvariantMethod 屬性)加以修飾。 此外,固定條件方法不得包含定義固定條件所需的調(diào)用之外的代碼。 例如,您不能在固定條件方法中添加任何類型的邏輯,無論邏輯是否純凈都不行。 您甚至不能添加只是用于記錄類的狀態(tài)的邏輯。 下面介紹如何為類定義固定條件協(xié)定:

public class News {
   
public String Title {get; set;}
   
public String Body {get; set;}

    [ContractInvariantMethod]
   
privatevoid ObjectInvariant()
    {
        Contract.Invariant(
!String.IsNullOrEmpty(Title));
        Contract.Invariant(
!String.IsNullOrEmpty(Body));
    }
}
  

NET技術(shù)代碼協(xié)定中的固定條件和繼承,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 久久无码人妻AV精品一区 | 日本无码毛片久久久九色综合 | 一区二一二 | 伊人久在线观看视频 | 亚洲中文无码亚洲人在线观看- | 九九久久久| 欧美最猛黑人AAAAA片 | 性xxx免费| 97精品视频在线观看 | 亚洲精品电影久久久影院 | 放射源分类办法 | 青春草久久 | 爽爽影院线观看免费 | 成人精品视频在线观看播放 | 亚洲AV久久无码高潮喷水 | FREE性丰满白嫩白嫩的HD | 最近免费中文字幕大全免费 | 男人日女人的b | 男人吃奶摸下挵进去啪啪 | 99成人在线| 国产免费高清mv视频在线观看 | 成人片在线播放 | 欧美一区二区三区激情视频 | 国产AV午夜精品一区二区入口 | ping色堂| 国语自产视频在线 | 正在播放黑人杂交派对卧槽 | 国产曰批试看免费视频播放免费 | 亲伦在线观看 | 蜜芽TV影院在线视频 | 牛牛精品专区在线 | 日本成熟bbxxxxxxxx | 久久国产精品永久网站 | 四虎4hu亚洲精品 | 好男人WWW免费高清视频在线 | 神马电影dy888午夜我不卡 | 国产免费不卡 | 91麻精品国产91久久久久 | 伊人热 | 动漫美女人物被黄漫在线看 | 荡乳乱公小说 |