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

在.NET中使用域對象持續模式

  域應用程序對象通常是整個應用程序的中心,被很多子系統使用。它們表現了核心的數據和業務驗證規則;因此,良好的域對象設計對于牢固的、高性能的和靈活的應用程序非常關鍵。

  當我們開發那些使用了關系數據庫的面向對象應用程序的時候,建立與數據庫設計一致的域對象設計可以使應用程序更容易理解,這是因為在典型情況下,域對象表現了現實的"實體"和它們彼此之間的關系。因此,在很多情形下,域對象都被"映射"為關系數據庫表和表間關系。但是,這種映射非常容易出錯,從而以不合需要的域對象設計為終結。域對象的良好設計要求開發者對面向對象和關系的基本原理有深刻的理解。

  域對象持續(Domain Objects Persistence)模式試圖提供一種向關系數據庫的映射關系,解除域對象與持續性邏輯之間的耦合關系。在這種模式中,域對象自身是不知道持續性機制的,因為其依賴關系是單方向的(從持續性對象到域對象)。這簡化了域對象的設計,使它們更容易理解。它也向應用程序中的那些使用了域對象的子系統隱藏了持續性對象。更好的是,這種模式可以在分布式系統中使用,在這種情況下,只有域對象四處傳遞,使應用程序不用把持續機制暴露給外部代碼。本文演示了如何使工廠(Factory)模式和域對象持續模式一起工作,來幫助域對象與持續性邏輯解除耦合。

  定義問題

  域對象是所有應用程序的中樞。它們捕獲了數據庫的核心數據模型和應用在數據上的業務規則。在典型情況下,應用程序的大多數子系統都依賴這些通用的域對象--這意味著域對象的映射越接近數據庫大綱,應用程序開發者理解和使用它們就越容易,因為它們表現了數據庫中的現實"實體"和"關系"。

  如果域對象沒有與應用程序的其它部分分開,你通常就得把持續性代碼復制到很多個位置。同樣,如果域對象沒有與持續性代碼分開,你遇到的情況就是,任何使用域對象的子系統都必須知道并依賴持續性對象。對持續性對象的任何更改都必然影響整個應用程序。因此,如果沒有把域對象與應用程序和持續性代碼分開都是不好的設計。

  定義解決方案

  實現上述目標的一個途徑是把域對象分離到一個獨立的子系統中,讓應用程序的其它部分需要域數據的時候再使用它們。此外,你還必須把域對象與持續性代碼分開。一方面,這種雙重分離避免了代碼重復;另一方面,它向域對象隱藏了持續性細節信息,建立了更容易修改的靈活設計。無論數據來自關系數據庫、XML文件、平面文件、活動目錄/LDAP或其它任何數據源,域對象和應用程序的其它部分都完全不會受到影響。

  在分離持續性邏輯和域對象的過程中,你必須確保域對象沒有依賴持續性代碼。這樣操作允許你把域對象暴露在那些你不希望暴露持續性代碼的地方。

  建立示例

  下面的C#示例使用了Northwind示例數據庫的Customer對象,它映射到數據庫的Customer表。

public class Customer { // 私有數據成員 String _customerId; String _companyName; String _contactName; String _contactTitle; public Customer() {} // Customer對象的屬性 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 { // 用于單行操作的標準事務方法 void Load(Customer cust); void Insert(Customer cust); void Update(Customer cust); void Delete(Customer cust); // 返回集合的查詢方法 ArrayList FindCustomersByState(String state);}public class CustomerFactory : ICustomerFactory{ //用于單行操作的標準事務方法 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) {   /* 此處是實現代碼 */  }}   下面的示例演示了客戶端如何使用這段代碼。public class NorthwindApp{ static void Main (string[] args) {  Customer cust = new Customer();  CustomerFactory custFactory = new CustomerFactory();  //從Northwind數據庫載入客戶  cust.CustomerId = "ALFKI";  custFactory.load(cust);  // 傳遞 Customer 對象  FooBar(cust);  // custList是Customer對象列表   ArrayList custList = custFactory.FindCustomersByState("CA"); }} 

  在上面代碼中,load方法根據CustomerID(應用程序可以把這個值傳遞到任何子系統中而不需要暴露持續性代碼)從數據庫中載入Customer對象。同樣,如果你載入Customer對象的數組列表,你隨后也可以傳遞數組列表,也沒有持續性代碼依賴。

  使用域對象持續模式分離持續性代碼和Customer對象,使得Customer對象更加面向對象,更易于理解,因為它的對象模型更加接近于數據庫中的數據模型。此外,這種分離使你能夠把Customer傳遞到應用程序的不同部分(甚至于通過.NET Remoting傳遞到分布式應用程序),而不需要暴露持續性代碼。

NET技術在.NET中使用域對象持續模式,轉載需保留來源!

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

主站蜘蛛池模板: 年轻的女教师2017韩国在线看 | 欧美日韩国产在线一区二区 | 做暧暧免费30秒体验 | 国产精品网红女主播久久久 | yellow在线观看免费高清的日本 | GOGOGO高清在线播放韩国 | 自拍视频亚洲综合在线精品 | 日韩欧美三区 | 亚洲精品无码国产爽快A片百度 | 国产传媒18精品免费观看 | 4399日本电影完整版在线观看免费 | 久久精品美女久久 | 精品久久久久久久高清 | 97午夜理论片影院在线播放 | 久亚洲AV无码专区A片 | 亚洲欧美日本久久综合网站 | 亚洲伊人情人综合网站 | 99热久久这里只有精品视频 | 好硬好湿好大再深一点动态图 | 国产精品高清视频在线 | 精品久久久久中文字幕加勒比东京热 | 中文字幕在线不卡精品视频99 | 动漫女主被扒开双腿羞辱 | 在线播放免费人成视频 | 欧美亚洲高清国产 | 秋霞电影院兔费理论84MB | 国产超嫩一线天在线播放 | 中文无码熟妇人妻AV在线 | 亚洲粉嫩美白在线 | 欧美美女性生活 | 99视频免视看 | 亚洲欧美日韩精品久久奇米色影视 | 亚洲 日韩经典 中文字幕 | 最新国自产拍 高清完整版 最新国产在线视频在线 | 色视频色露露永久免费观看 | 美女pk精子4| 无羞耻肉动漫在线观看 | 果冻传媒APP免费网站在线观看 | 观看免费做视频 | 一起碰一起噜一起草视频 | 狠狠色综合久久婷婷 |