一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

在.NET中使用域?qū)ο蟪掷m(xù)模式

  域應(yīng)用程序?qū)ο笸ǔJ钦麄€(gè)應(yīng)用程序的中心,被很多子系統(tǒng)使用。它們表現(xiàn)了核心的數(shù)據(jù)和業(yè)務(wù)驗(yàn)證規(guī)則;因此,良好的域?qū)ο笤O(shè)計(jì)對(duì)于牢固的、高性能的和靈活的應(yīng)用程序非常關(guān)鍵。

  當(dāng)我們開發(fā)那些使用了關(guān)系數(shù)據(jù)庫(kù)的面向?qū)ο?a href=/pingce/yingyong/ target=_blank class=infotextkey>應(yīng)用程序的時(shí)候,建立與數(shù)據(jù)庫(kù)設(shè)計(jì)一致的域?qū)ο笤O(shè)計(jì)可以使應(yīng)用程序更容易理解,這是因?yàn)樵诘湫颓闆r下,域?qū)ο蟊憩F(xiàn)了現(xiàn)實(shí)的"實(shí)體"和它們彼此之間的關(guān)系。因此,在很多情形下,域?qū)ο蠖急?映射"為關(guān)系數(shù)據(jù)庫(kù)表和表間關(guān)系。但是,這種映射非常容易出錯(cuò),從而以不合需要的域?qū)ο笤O(shè)計(jì)為終結(jié)。域?qū)ο蟮牧己迷O(shè)計(jì)要求開發(fā)者對(duì)面向?qū)ο蠛完P(guān)系的基本原理有深刻的理解。

  域?qū)ο蟪掷m(xù)(Domain Objects Persistence)模式試圖提供一種向關(guān)系數(shù)據(jù)庫(kù)的映射關(guān)系,解除域?qū)ο笈c持續(xù)性邏輯之間的耦合關(guān)系。在這種模式中,域?qū)ο笞陨硎遣恢莱掷m(xù)性機(jī)制的,因?yàn)槠湟蕾囮P(guān)系是單方向的(從持續(xù)性對(duì)象到域?qū)ο螅?。這簡(jiǎn)化了域?qū)ο蟮脑O(shè)計(jì),使它們更容易理解。它也向應(yīng)用程序中的那些使用了域?qū)ο蟮淖酉到y(tǒng)隱藏了持續(xù)性對(duì)象。更好的是,這種模式可以在分布式系統(tǒng)中使用,在這種情況下,只有域?qū)ο笏奶巶鬟f,使應(yīng)用程序不用把持續(xù)機(jī)制暴露給外部代碼。本文演示了如何使工廠(Factory)模式和域?qū)ο蟪掷m(xù)模式一起工作,來(lái)幫助域?qū)ο笈c持續(xù)性邏輯解除耦合。

  定義問(wèn)題

  域?qū)ο笫撬?a href=/pingce/yingyong/ target=_blank class=infotextkey>應(yīng)用程序的中樞。它們捕獲了數(shù)據(jù)庫(kù)的核心數(shù)據(jù)模型和應(yīng)用在數(shù)據(jù)上的業(yè)務(wù)規(guī)則。在典型情況下,應(yīng)用程序的大多數(shù)子系統(tǒng)都依賴這些通用的域?qū)ο?-這意味著域?qū)ο蟮挠成湓浇咏鼣?shù)據(jù)庫(kù)大綱,應(yīng)用程序開發(fā)者理解和使用它們就越容易,因?yàn)樗鼈儽憩F(xiàn)了數(shù)據(jù)庫(kù)中的現(xiàn)實(shí)"實(shí)體"和"關(guān)系"。

  如果域?qū)ο鬀](méi)有與應(yīng)用程序的其它部分分開,你通常就得把持續(xù)性代碼復(fù)制到很多個(gè)位置。同樣,如果域?qū)ο鬀](méi)有與持續(xù)性代碼分開,你遇到的情況就是,任何使用域?qū)ο蟮淖酉到y(tǒng)都必須知道并依賴持續(xù)性對(duì)象。對(duì)持續(xù)性對(duì)象的任何更改都必然影響整個(gè)應(yīng)用程序。因此,如果沒(méi)有把域?qū)ο笈c應(yīng)用程序和持續(xù)性代碼分開都是不好的設(shè)計(jì)。

  定義解決方案

  實(shí)現(xiàn)上述目標(biāo)的一個(gè)途徑是把域?qū)ο蠓蛛x到一個(gè)獨(dú)立的子系統(tǒng)中,讓應(yīng)用程序的其它部分需要域數(shù)據(jù)的時(shí)候再使用它們。此外,你還必須把域?qū)ο笈c持續(xù)性代碼分開。一方面,這種雙重分離避免了代碼重復(fù);另一方面,它向域?qū)ο箅[藏了持續(xù)性細(xì)節(jié)信息,建立了更容易修改的靈活設(shè)計(jì)。無(wú)論數(shù)據(jù)來(lái)自關(guān)系數(shù)據(jù)庫(kù)、XML文件、平面文件、活動(dòng)目錄/LDAP或其它任何數(shù)據(jù)源,域?qū)ο蠛?a href=/pingce/yingyong/ target=_blank class=infotextkey>應(yīng)用程序的其它部分都完全不會(huì)受到影響。

  在分離持續(xù)性邏輯和域?qū)ο蟮倪^(guò)程中,你必須確保域?qū)ο鬀](méi)有依賴持續(xù)性代碼。這樣操作允許你把域?qū)ο蟊┞对谀切┠悴幌M┞冻掷m(xù)性代碼的地方。

  建立示例

  下面的C#示例使用了Northwind示例數(shù)據(jù)庫(kù)的Customer對(duì)象,它映射到數(shù)據(jù)庫(kù)的Customer表。

public class Customer { // 私有數(shù)據(jù)成員 String _customerId; String _companyName; String _contactName; String _contactTitle; public Customer() {} // Customer對(duì)象的屬性 public String CustomerId {  get { return _customerId; }   set { _customerId = value;} } public String CompanyName {  get { return _companyName; }   set { _companyName = value;} } public String ContactName {  get { return _contactName; }   set { _contactName = value;} } public String ContactTitle {  get { return _contactTitle; }   set { _contactTitle = value;} }}public interface ICustomerFactory { // 用于單行操作的標(biāo)準(zhǔn)事務(wù)方法 void Load(Customer cust); void Insert(Customer cust); void Update(Customer cust); void Delete(Customer cust); // 返回集合的查詢方法 ArrayList FindCustomersByState(String state);}public class CustomerFactory : ICustomerFactory{ //用于單行操作的標(biāo)準(zhǔn)事務(wù)方法 void Load(Customer cust) { /* Implement here */ } void Insert(Customer cust) { /* Implement here */ } void Update(Customer cust) { /* Implement here */ } void Delete(Customer cust) { /* Implement here */ } //返回集合的查詢方法 ArrayList FindCustomersByState(String state) {   /* 此處是實(shí)現(xiàn)代碼 */  }}   下面的示例演示了客戶端如何使用這段代碼。public class NorthwindApp{ static void Main (string[] args) {  Customer cust = new Customer();  CustomerFactory custFactory = new CustomerFactory();  //從Northwind數(shù)據(jù)庫(kù)載入客戶  cust.CustomerId = "ALFKI";  custFactory.load(cust);  // 傳遞 Customer 對(duì)象  FooBar(cust);  // custList是Customer對(duì)象列表   ArrayList custList = custFactory.FindCustomersByState("CA"); }} 

  在上面代碼中,load方法根據(jù)CustomerID(應(yīng)用程序可以把這個(gè)值傳遞到任何子系統(tǒng)中而不需要暴露持續(xù)性代碼)從數(shù)據(jù)庫(kù)中載入Customer對(duì)象。同樣,如果你載入Customer對(duì)象的數(shù)組列表,你隨后也可以傳遞數(shù)組列表,也沒(méi)有持續(xù)性代碼依賴。

  使用域?qū)ο蟪掷m(xù)模式分離持續(xù)性代碼和Customer對(duì)象,使得Customer對(duì)象更加面向?qū)ο?,更易于理解,因?yàn)樗膶?duì)象模型更加接近于數(shù)據(jù)庫(kù)中的數(shù)據(jù)模型。此外,這種分離使你能夠把Customer傳遞到應(yīng)用程序的不同部分(甚至于通過(guò).NET Remoting傳遞到分布式應(yīng)用程序),而不需要暴露持續(xù)性代碼。

NET技術(shù)在.NET中使用域?qū)ο蟪掷m(xù)模式,轉(zhuǎn)載需保留來(lái)源!

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

主站蜘蛛池模板: 激情图片激情小说伦理 | 久久久久激情免费观看 | 国产真实乱子伦精品视 | 国产精品一区伦免视频播放 | 高跟黑色丝袜国产91美女紫丝 | 国产极品白嫩美女在线观看看 | 巨大巨粗巨长的黑吊免费视频 | 一级女人毛片人一女人 | 亚洲成a人| 日本视频www色变态 日本视频网站在线www色 | vr欧美乱强伦xxxxx | 中文字幕激情 | 婷婷色中文字幕 | 色偷偷成人 | 欧美大尺度无遮挡性视频 | 国产色拍 | 午夜免费视频观看 | 欧美激情视频二区 | 免费a资源 | 国产欧美一区二区精品性色 | 久久精品中文字幕有码日本 | 日韩经典欧美精品一区 | 在线看一区| 欧美整片完整片视频在线 | 成人国产精品2021 | 四虎最新永久在线精品免费 | 久久一区二区三区99 | 国产亚洲综合色就色 | 福利在线播放 | 成人精品视频在线观看 | 亚洲影视在线 | 亚洲婷婷综合网 | 精品一区二区三区四区在线 | 亚洲成人播放 | 久草干| 91精品国产综合久 | 色妹子影院 | 在线播放91| 久视频免费精品6 | 美女扒开双腿让男人爽透视频 | 思思久热re6这里有精品 |