最新發(fā)布的 Entity Framework 4.1 和新的 Code First 開發(fā)模式打破了服務(wù)器程序開發(fā)的基本規(guī)則:如果數(shù)據(jù)庫沒有準(zhǔn)備就緒,不要輕舉妄動(dòng)(Don’t take a single step) " /> 国产综合久久,成av在线,久久黄色

中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

Dino Esposito: 一個(gè)領(lǐng)域模型的設(shè)計(jì)

  英文原文:Design of a Domain Model

  最新發(fā)布的 Entity Framework 4.1 和新的 Code First 開發(fā)模式打破了服務(wù)器程序開發(fā)的基本規(guī)則:如果數(shù)據(jù)庫沒有準(zhǔn)備就緒,不要輕舉妄動(dòng)(Don’t take a single step)Code First 允許開發(fā)人員重點(diǎn)關(guān)注業(yè)務(wù)領(lǐng)域并根據(jù)“類”(class)來為該領(lǐng)域建模。在某種程度上, Code First 模式鼓勵(lì)在 .NET 環(huán)境中應(yīng)用“領(lǐng)域驅(qū)動(dòng)設(shè)計(jì) (DDD) ”原則。業(yè)務(wù)領(lǐng)域由相互關(guān)聯(lián)的實(shí)體構(gòu)成,這些實(shí)體通過屬性對(duì)外公開自己的數(shù)據(jù),通過方法和事件對(duì)外公開自己的行為。更重要的是,每個(gè)實(shí)體都可能處于某一狀態(tài),并且與一組動(dòng)態(tài)的驗(yàn)證規(guī)則相綁定。

  為實(shí)際應(yīng)用場景編寫對(duì)象模型會(huì)面臨一些在演示程序和教程中沒有涉及的問題。在本文中,我將挑戰(zhàn)這些問題,并討論如何構(gòu)建 Customer 類,我會(huì)就此簡要介紹一些設(shè)計(jì)模式和設(shè)計(jì)實(shí)踐,例如Party模式、聚合根(aggregate roots)、工廠(factories)以及代碼協(xié)定(Code Contracts)和企業(yè)庫驗(yàn)證應(yīng)用程序塊 (VAB) 等技術(shù)。

  有一個(gè)開源項(xiàng)目可以作為參考,這里討論的代碼就是其中的一小部分。 它就是由 Andrea Saltarello 創(chuàng)建的 Northwind Starter Kit 項(xiàng)目 (nsk.codeplex.com) ,該項(xiàng)目旨在介紹構(gòu)建多層解決方案的有效實(shí)踐。

  對(duì)象模型(Object Model) vs. 領(lǐng)域模型(Domain Model)

  爭論是使用對(duì)象模型還是領(lǐng)域模型似乎沒有意義,在大多數(shù)情況下,這只是一個(gè)術(shù)語表述問題(terminology) 但準(zhǔn)確地使用術(shù)語是確保團(tuán)隊(duì)所有成員在使用特定術(shù)語時(shí)始終遵循同一概念的重要因素。

  對(duì)于軟件行業(yè)的幾乎每個(gè)人而言,對(duì)象模型是一個(gè)具有共性的并且可能相關(guān)的對(duì)象的集合。領(lǐng)域模型有何不同? 域模型歸根結(jié)底仍然是一個(gè)對(duì)象模型,因此,交替使用這兩個(gè)術(shù)語可能不會(huì)產(chǎn)生嚴(yán)重的錯(cuò)誤。但在專門強(qiáng)調(diào)使用“領(lǐng)域模型”一詞時(shí),它可能會(huì)使大家對(duì)所構(gòu)建的對(duì)象的形態(tài)(shape)產(chǎn)生某些期望。

  領(lǐng)域模型的這種用法與 Martin Fowler 給出的以下定義相關(guān):

由行為和數(shù)據(jù)組合而成的領(lǐng)域的對(duì)象模型。相應(yīng)地,這些行為用于表達(dá)業(yè)務(wù)規(guī)則和特定的業(yè)務(wù)邏輯(請(qǐng)參閱 P of EAA page 116)。

An object model of the domain that incorporates both behavior and data. In turn, the behavior expresses both rules and specific logic.

  DDD 向領(lǐng)域模型中添加了一些實(shí)用的規(guī)則。從這個(gè)角度看,領(lǐng)域模型不同于對(duì)象模型,它更多推薦使用值對(duì)象(value objects)而不是基元類型(primitive types)。例如在對(duì)象模型中,一個(gè)整數(shù)可能具有多種含義,它可能表示溫度、金額、大小或數(shù)量。而在領(lǐng)域模型中,針對(duì)各種不同的場景會(huì)使用特定的值對(duì)象類型。

  此外,領(lǐng)域模型需要識(shí)別出聚合根。聚合根是一個(gè)通過組合其他實(shí)體而得到的實(shí)體。聚合根中的對(duì)象與外部沒有直接的關(guān)聯(lián),也就是不存在這樣的用例——不經(jīng)過根對(duì)象而直接使用這些對(duì)象。比如,Order 實(shí)體就是一個(gè)典型的聚合根。 Order 包含聚合的 OrderItem,而不包含 Product。 難以想象您使用一個(gè)OrderItem 而它并不來自 Order(即使這只是由specs決定的,譯者注:也就是通過規(guī)約查詢直接得到相應(yīng)的OderItem)。另一方面,您很可能具有這樣一些用例,您在其中使用不涉及訂單的 Product 實(shí)體。聚合根負(fù)責(zé)維護(hù)處于有效狀態(tài)的子對(duì)象并持久化這些對(duì)象。

  最后,某些領(lǐng)域模型類(class)可以提供用于創(chuàng)建新實(shí)例的公共工廠方法,而不是構(gòu)造函數(shù)。如果模型類通常是獨(dú)立的并且實(shí)際上不是層次結(jié)構(gòu)的一部分,或者用于創(chuàng)建該類的步驟只是與客戶端相關(guān),則可以使用普通的構(gòu)造函數(shù)。但是,在使用聚合根這樣的復(fù)雜對(duì)象時(shí),您還需要實(shí)例化之外的其他抽象級(jí)別。 DDD 引入了工廠對(duì)象(簡單一些的話,可以使用類中的工廠方法)方式,這種方式可將客戶端的需求與內(nèi)部的對(duì)象及其關(guān)系和規(guī)則分離開來。可以在 An Introduction to Domain Driven Design 中找到有關(guān) DDD 的清晰簡要的介紹。

  Party模式

  讓我們重點(diǎn)分析一下 Customer 類。 根據(jù)上文所述,此處是可能的簽名:

public class Customer : Organization, IAggregateRoot
{
...
}

NET技術(shù)Dino Esposito: 一個(gè)領(lǐng)域模型的設(shè)計(jì),轉(zhuǎn)載需保留來源!

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

主站蜘蛛池模板: 国产激情一区二区三区 | 成人性视频免费网站 | 一区二区三区在线播放 | 欧美中文字幕一区 | 男女视频免费 | 中文字幕在线看第二 | 欧美三级免费观看 | 久久久男人的天堂 | 精久久| 国产精品精品视频 | 国产精品日产欧美久久久久 | 鲁大师一区影视 | www.精品国产 | 久久www免费人成看片高清 | 国产视频一区在线观看 | 久久精品成人一区 | 91污在线 | 精品久久久久久亚洲精品 | 91精品久久久久久久久中文字幕 | 国产精品一区久久久 | 日韩一级在线 | 91精品国产91久久久久久吃药 | 天堂在线免费视频 | 亚洲电影免费 | 91精品国产91久久久久游泳池 | 精品国产欧美一区二区 | a久久久久久 | 中国一级特黄真人毛片免费观看 | 欧美精品91 | 日韩综合在线 | 久久99视频这里只有精品 | 亚洲精品欧美 | 欧美激情亚洲激情 | 国产精品欧美精品 | 精品99久久久久久 | 色婷婷一区二区三区四区 | 视频在线h | 国产精品福利网 | 欧洲av一区 | 精品国产视频 | 精品久久久久一区二区国产 |