亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

用于跨不同應(yīng)用程序框架的數(shù)據(jù)服務(wù)的平臺的制作方法

文檔序號:6554332閱讀:406來源:國知局
專利名稱:用于跨不同應(yīng)用程序框架的數(shù)據(jù)服務(wù)的平臺的制作方法
相關(guān)申請的交叉引用本申請要求于2005年2月28日提交的,題為“PLATFORM FOR DATASERVICES ACROSS DISPARATE APPLICATION FRAMEWORKS(用于跨不同應(yīng)用程序框架的數(shù)據(jù)服務(wù)的平臺)”的美國專利申請第60/657,556號的優(yōu)先權(quán)。本申請也涉及以下美國專利申請于2005年2月28日提交的,題為“DATA MODELFOR OBJECT-RELATIONAL DATA(用于對象-關(guān)系數(shù)據(jù)的數(shù)據(jù)模型)”的臨時專利申請第60/657,295號;于_____提交,題為“DATA MODEL FOROBJECT-RELATIONAL DATA(用于對象-關(guān)系數(shù)據(jù)的數(shù)據(jù)模型)”的專利申請第____號;于2005年2月28提交的,題為“STORAGE API FOR A COMMONDATA PLATFORM(用于共用數(shù)據(jù)平臺的存儲API)”的臨時專利申請第60/657,522號;以及于____提交的,題為“DATA MODEL FOR OBJECT-RELATIONALDATA(用于對象型關(guān)系數(shù)據(jù)的數(shù)據(jù)模型)”的專利申請第____號。這些專利申請全部引用在此作為參考。
背景技術(shù)
數(shù)據(jù)成為了幾乎所有應(yīng)用程序中的重要資產(chǎn),無論該應(yīng)用程序是用于瀏覽產(chǎn)品和生成訂單的業(yè)務(wù)線(LOB)應(yīng)用程序還是用于在人員之間調(diào)度會議的個人信息管理(PIM)應(yīng)用程序。應(yīng)用程序?qū)?yīng)用程序數(shù)據(jù)執(zhí)行數(shù)據(jù)訪問/操縱和數(shù)據(jù)管理操作。典型的應(yīng)用程序操作查詢數(shù)據(jù)集合、取得結(jié)果集、執(zhí)行改變數(shù)據(jù)狀態(tài)的某些應(yīng)用邏輯,最后將數(shù)據(jù)保存到存儲介質(zhì)中。
傳統(tǒng)上,客戶機/服務(wù)器應(yīng)用程序?qū)⒉樵兒统志脛幼魈峤唤o部署在數(shù)據(jù)層中的數(shù)據(jù)庫管理系統(tǒng)(DBMS)。如果有以數(shù)據(jù)為中心的邏輯,就將其編碼為數(shù)據(jù)庫系統(tǒng)中的存儲過程。數(shù)據(jù)庫系統(tǒng)按照表格和行對數(shù)據(jù)進行操作,而應(yīng)用層內(nèi)的應(yīng)用程序按照編程語言對象(例如類和結(jié)構(gòu))對數(shù)據(jù)進行操作。應(yīng)用程序和數(shù)據(jù)層中的數(shù)據(jù)操作服務(wù)(以及機制)的不匹配在客戶機/服務(wù)器系統(tǒng)中是可以容忍的。然而,隨著web技術(shù)(以及面向服務(wù)的體系結(jié)構(gòu))的出現(xiàn)以及應(yīng)用程序服務(wù)器在較廣的范圍內(nèi)得到接受,應(yīng)用程序變成多層的,更重要的是現(xiàn)在數(shù)據(jù)在每一層中存在。
在這種分層應(yīng)用程序體系結(jié)構(gòu)中,在多個層中操縱數(shù)據(jù)。此外,隨著在可尋址性和大容量存儲器方面的硬件進步,更多數(shù)據(jù)變?yōu)榇鎯ζ鞒qv的。應(yīng)用程序也處理不同類型的數(shù)據(jù),諸如對象、文件和XML(可擴展標記語言)數(shù)據(jù)。
在硬件和軟件環(huán)境中,越來越多地需要能很好地與編程環(huán)境集成的豐富數(shù)據(jù)訪問和操縱服務(wù)。所引入解決上述問題的一個常規(guī)實現(xiàn)是數(shù)據(jù)平臺。數(shù)據(jù)平臺提供了服務(wù)(機制)的集合,以供應(yīng)用程序訪問、操縱和管理與應(yīng)用程序編程環(huán)境很好地集成的數(shù)據(jù)。然而,這種常規(guī)體系結(jié)構(gòu)有很多不足之處。對這種數(shù)據(jù)平臺的一些關(guān)鍵要求包括復(fù)雜對象建模、豐富關(guān)系、邏輯和物理數(shù)據(jù)抽象的分離、查詢豐富數(shù)據(jù)模型概念、主動通知、更好地與中層架構(gòu)集成。

發(fā)明內(nèi)容
以下示出了本發(fā)明的簡單概述,以便提供對該體系結(jié)構(gòu)的某些方面的基本理解。該概述不是對體系結(jié)構(gòu)的寬泛綜述。它不是旨在標識本發(fā)明的關(guān)鍵/決定性元素或描繪本發(fā)明的范圍。它唯一的目的是以簡單的形式示出本發(fā)明的某些概念,作為以后示出的更為詳細描述的序言。
這里所解釋和要求保護的本發(fā)明的一方面包括便于在多個不同的應(yīng)用程序框架的公用數(shù)據(jù)存儲和多個應(yīng)用程序之間進行數(shù)據(jù)管理的體系結(jié)構(gòu)。它形成了不同于將表格映射到對象的應(yīng)用程序的映射層。該體系結(jié)構(gòu)將桌面應(yīng)用程序和業(yè)務(wù)線(LOB)應(yīng)用程序框架之間的空白連接起來,以允許應(yīng)用程序在應(yīng)用程序?qū)ο蠹壎潜砀窦壧幚頂?shù)據(jù)。此外,該體系結(jié)構(gòu)允許在所有的框架之間共享該數(shù)據(jù),使得由最終用戶應(yīng)用程序定義的數(shù)據(jù)實體可以被LOB應(yīng)用程序所使用,反之亦然。
該體系結(jié)構(gòu)包括便于數(shù)據(jù)存儲的數(shù)據(jù)存儲組件,其中數(shù)據(jù)包括結(jié)構(gòu)化的、半結(jié)構(gòu)化的和非結(jié)構(gòu)化的數(shù)據(jù)。公用數(shù)據(jù)平臺與數(shù)據(jù)存儲組件接口,以便提供多個不同的應(yīng)用程序框架能夠訪問的數(shù)據(jù)服務(wù),其中數(shù)據(jù)服務(wù)允許不同框架的相應(yīng)應(yīng)用程序訪問數(shù)據(jù)。該數(shù)據(jù)平臺還包括API(應(yīng)用程序編程接口),以便利于與公共類、接口和靜態(tài)助手函數(shù)形式的應(yīng)用程序通信;運行時間組件,它接口到API并提供對象-關(guān)系映射、查詢映射以及強制實施約束;以及約束/安全引擎,以便于聲明性地創(chuàng)作約束,并控制對數(shù)據(jù)平臺實體的訪問。
在本發(fā)明的另一方面,公用數(shù)據(jù)平臺(CDP)提供在各種最終用戶應(yīng)用程序框架(例如PIM(個人信息管理器)框架到LOB(業(yè)務(wù)線)應(yīng)用程序框架)間公用的數(shù)據(jù)服務(wù)。應(yīng)用程序的范圍包括諸如瀏覽器、郵件和媒體應(yīng)用程序等最終用戶應(yīng)用程序;諸如文檔管理和協(xié)作應(yīng)用程序等知識工作者應(yīng)用程序;諸如ERP(企業(yè)資源計劃)和CRM(客戶關(guān)系管理)等LOB應(yīng)用程序;Web應(yīng)用程序和系統(tǒng)管理應(yīng)用程序。
在本發(fā)明的另一方面,CDP為應(yīng)用程序提供的好處包括在多層環(huán)境中提供建模和存儲結(jié)構(gòu)化、半結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)的能力的豐富存儲、靈活組織、豐富查詢/搜索、豐富行為、靈活管理、數(shù)據(jù)同步、共享、方案和靈活部署。
為了達到上述和相關(guān)目的,這里結(jié)合以下描述和附圖描述該體系結(jié)構(gòu)的某些說明性方面。然而,這些方面僅示出各種可采取本體系結(jié)構(gòu)原理的方式中的幾種,且本發(fā)明旨在包括所有這些方面以及它們的等價方面。結(jié)合附圖,該體系結(jié)構(gòu)的其他優(yōu)點和新穎性將通過以下對本發(fā)明的詳細描述而變得顯而易見。


圖1示出了依照本體系結(jié)構(gòu)采用公用數(shù)據(jù)平臺(CDP)的系統(tǒng)。
圖2示出了依照所揭示的體系結(jié)構(gòu)的更為詳細的CDP系統(tǒng)。
圖3示出了實現(xiàn)便于管理數(shù)據(jù)的公用數(shù)據(jù)平臺的方法。
圖4示出了關(guān)于本發(fā)明的體系結(jié)構(gòu)的CDP組件的示意圖。
圖5示出了CDP各個組件內(nèi)的數(shù)據(jù)流。
圖6示出了可以使用CDP實現(xiàn)的各種框架。
圖7示出了允許多個應(yīng)用程序共享數(shù)據(jù)的公用的基于數(shù)據(jù)庫的文件存儲系統(tǒng)情況。
圖8示出了依照CDP和相關(guān)聯(lián)的體系結(jié)構(gòu)使用多個框架的單個應(yīng)用程序。
圖9示出了與關(guān)聯(lián)于多個不同的框架的多個應(yīng)用程序共享數(shù)據(jù)的CDP。
圖10示出了便于數(shù)據(jù)管理的CDP的雙層部署。
圖11示出了便于數(shù)據(jù)管理的共享數(shù)據(jù)的雙層部署。
圖12示出了第二配置,使得應(yīng)用程序具有不希望其他應(yīng)用程序看到和/或使用的私有數(shù)據(jù)。
圖13示出了所感興趣的第三配置,使得另一應(yīng)用程序直接地訪問存儲。
圖14示出了CDP組件的三層部署配置。
圖15示出了CDP組件的三層部署配置。
圖16示出了同時運行在客戶機層和中間層上的應(yīng)用程序邏輯圖。
圖17示出了同時運行在客戶機層和中間層上的應(yīng)用程序邏輯圖。
圖18示出了使用至少一個實體對項進行建模。
圖19示出了通過將UAF結(jié)合在CDP的之上來實現(xiàn)各種功能的可擴展機制。
圖20示出了在CDP上實現(xiàn)的LOB應(yīng)用程序的例子。
圖21示出了便于在CDP的各個組件內(nèi)管理數(shù)據(jù)流的方法。
圖22示出了便于跨多個不同的框架部署CDP的方法,其中不同應(yīng)用程序可與每個框架有關(guān)。
圖23示出了可用于執(zhí)行所揭示的框架的計算機的框圖。
圖24示出了依照本發(fā)明的示例性計算機環(huán)境的示意性框圖。
具體實施例方式
現(xiàn)在參考附圖描述該體系結(jié)構(gòu),在所有附圖中,相同的參考標號用于標識相同的組件。在以下附圖中,為了說明起見,提供了大量的具體細節(jié),以便提供對本發(fā)明的全面理解。然而,顯然的是,可以不采用這些具體細節(jié)來實現(xiàn)本發(fā)明。在其他例子中,以框圖形式示出了公知的結(jié)構(gòu)和設(shè)備,以便于描述該體系結(jié)構(gòu)。
如本申請中所使用的,術(shù)語“組件”和“系統(tǒng)”指的是計算機相關(guān)實體,它們可以是硬件、硬件和軟件的組合、軟件或執(zhí)行中的軟件。例如,組件可以是,但不限于,在處理器上運行的進程、處理器、對象、可執(zhí)行代碼、執(zhí)行的線程、程序和/或計算機。作為示例,運行在服務(wù)器上的應(yīng)用程序和服務(wù)器都可以是組件。一個或多個組件可以駐留在執(zhí)行的進程和/或線程內(nèi),組件可以位于一個計算機上和/或在兩個或多個計算機上分布。
數(shù)據(jù)平臺是為應(yīng)用程序提供服務(wù)(或機制)集合的平臺,以便于應(yīng)用程序訪問、操縱和管理與應(yīng)用程序編程環(huán)境很好地集成的數(shù)據(jù)。本發(fā)明是對常規(guī)數(shù)據(jù)平臺的改進。該體系結(jié)構(gòu)是提供跨各種應(yīng)用程序框架(例如PIM(個人信息管理器)框架和LOB(業(yè)務(wù)線)框架)公用的數(shù)據(jù)服務(wù)的公用數(shù)據(jù)平臺(CDP)。應(yīng)用程序的范圍包括,諸如瀏覽器、郵件和媒體應(yīng)用程序等最終用戶應(yīng)用程序;諸如文件管理和協(xié)作應(yīng)用程序等知識工作者應(yīng)用程序;諸如ERP(企業(yè)資源計劃)和CRM(客戶關(guān)系管理)等LOB應(yīng)用程序;Web應(yīng)用程序和系統(tǒng)管理應(yīng)用程序。
CDP至少向應(yīng)用程序提供了以下好處1.豐富存儲-建模和存儲所有類型的數(shù)據(jù)(結(jié)構(gòu)化的、半結(jié)構(gòu)化的和非結(jié)構(gòu)化的)的能力。
a.關(guān)系性數(shù)據(jù)建模和訪問。
b.豐富對象抽象和編程環(huán)境。
c.經(jīng)由XML存儲和查詢的半結(jié)構(gòu)化數(shù)據(jù)建模。
d.作為文件的非結(jié)構(gòu)化數(shù)據(jù)。
2.靈活組織-非靜態(tài)地組織任意對象集合為表格的能力。
a.支持文件系統(tǒng)名字空間和組織。
3.豐富查詢/搜索-查詢所有數(shù)據(jù)的能力。
a.支持豐富查詢(例如SQL、OSQL(面向?qū)ο骃QL)、XML查詢、C#序列)。OSQL是作為SQL的超集的功能語言。
4.豐富行為-支持豐富數(shù)據(jù)行為。這不是對應(yīng)用程序/業(yè)務(wù)過程邏輯的替代。
5.靈活管理-不同粒度上的管理(例如項級操作,諸如復(fù)制、移動和串行化)。
6.數(shù)據(jù)同步-任意數(shù)據(jù)集合的對等和主從管理同步。
7.共享-跨多個應(yīng)用程序和多個應(yīng)用程序框架共享數(shù)據(jù)的能力。例如跨Outlook和CRM應(yīng)用程序共享聯(lián)系人。
8.方案-用于用戶和ISV(獨立支持銷售商)應(yīng)用程序的豐富、取出即可用(out-of-the-box)方案,以便于彼此協(xié)作。
9.靈活部署-在二和三層環(huán)境中可部署。
CDP和相關(guān)聯(lián)的體系結(jié)構(gòu)允許上述的所有好處。關(guān)鍵的創(chuàng)新包括分層體系結(jié)構(gòu)、析出在多個應(yīng)用程序框架之間公用的建模概念的公用數(shù)據(jù)模型以及CDP組件(功能)體系結(jié)構(gòu)。
首先參考附圖,圖1示出了采用CDP 102的系統(tǒng)100。CDP 102用于提供數(shù)據(jù)應(yīng)用程序和應(yīng)用程序框架104以及數(shù)據(jù)存儲器106上的數(shù)據(jù)之間的數(shù)據(jù)管理。數(shù)據(jù)存儲器106可以存儲,例如結(jié)構(gòu)化的、半結(jié)構(gòu)化的和非結(jié)構(gòu)化的數(shù)據(jù)類型。如上所述,CDP 102提供跨應(yīng)用程序框架和與之相關(guān)聯(lián)的最終用戶應(yīng)用程序公用的數(shù)據(jù)服務(wù)。CDP 102還包括便于與應(yīng)用程序和應(yīng)用程序框架104接口的API 108、運行庫組件110以及約束/安全引擎組件112。API 108為使用CDP的應(yīng)用程序提供了公共類、接口和靜態(tài)助手功能形式的編程接口。例子包括StorageContext(存儲環(huán)境)、StorageSearcher(存儲搜索器)、Entity(實體)、TableSet(表集)、Table(表)、EntityReference(實體引用)以及TableReference(表引用)。應(yīng)該理解,數(shù)據(jù)庫編程語言集成(例如C#序列操作符)可以是API 108的一部分。
CDP運行庫組件110是實現(xiàn)在公共API層108中所展示的各種特征的層。它通過提供對象-關(guān)系映射和查詢映射、強制實施數(shù)據(jù)模型約束等來實現(xiàn)公用數(shù)據(jù)模型。更具體地,CDP運行庫110包括公用數(shù)據(jù)模型組件實現(xiàn);查詢處理器組件;會話和事務(wù)組件;對象高速緩存,它可以包括會話高速緩存和顯式高速緩存;服務(wù)組件,它包括改變跟蹤、沖突檢測以及事件處理;指針和規(guī)則組件;業(yè)務(wù)邏輯主機組件;以及持久化和查詢引擎,它提供了核心的持久化和查詢服務(wù)。持久化和查詢服務(wù)內(nèi)部是對象-關(guān)系映射,包括查詢/更新映射。CDP 102也包括約束/安全引擎112,用于將約束應(yīng)用到數(shù)據(jù)存儲器106上和應(yīng)用安全策略,例如基于角色的安全。
圖2示出了可以包括CDP 102的更為詳細的CDP系統(tǒng)200,它接口到分離的數(shù)據(jù)存儲(未示出)的存儲管理組件202?;蛘?,存儲管理組件202可以包括諸如可以與SQL服務(wù)器實現(xiàn)相關(guān)聯(lián)的數(shù)據(jù)存儲。應(yīng)該理解,數(shù)據(jù)存儲可以存儲結(jié)構(gòu)化的、半結(jié)構(gòu)化的和非結(jié)構(gòu)化的數(shù)據(jù)類型。
CDP的目標是通過允許支持各種應(yīng)用程序框架204(被示為AF1,AF2,...,AFZ)來支持快速的應(yīng)用程序發(fā)展??蚣?04可以包括例如LOB、最終用戶和系統(tǒng)管理應(yīng)用程序框架。與應(yīng)用程序框架204(分別示為AF1,AF2和...AFZ)相關(guān)聯(lián)的應(yīng)用程序206(示為APP1,...,APPS;APP1,...,APPT)可以充分利用各自的應(yīng)用程序框架204、CDP 102和底層存儲202來開發(fā)豐富的應(yīng)用程序。分層方法的好處在下文中描述。
存儲管理層202提供了對核心數(shù)據(jù)管理能力(例如可伸縮性、容量、可用性和安全性)的支持;CDP層102支持對應(yīng)用程序框架204的豐富數(shù)據(jù)模型、映射、查詢和數(shù)據(jù)訪問機制。CDP機制是可擴展的,使得多個應(yīng)用程序框架204可以被構(gòu)建在數(shù)據(jù)平臺上。應(yīng)用程序框架204是專用于應(yīng)用程序域(例如最終用戶應(yīng)用程序和LOB應(yīng)用程序)的附加模型和機制。分層體系結(jié)構(gòu)方法具有若干優(yōu)點。它允許每一層獨立和快速地更新和部署。CDP層102與存儲層202相比,可以更為敏捷、更新更為自由且更為頻繁地更新。分層方法將CDP層102與公司策略相結(jié)合。最終,存儲層202可以集中在核心數(shù)據(jù)管理能力上,從而與策略相一致。
現(xiàn)在參考圖3,示出了實現(xiàn)公用數(shù)據(jù)平臺的方法。盡管為了簡化說明起見,這里以例如流程圖形式示出的一個和多個方法被示出和描述為一系列動作,但是應(yīng)該理解,本體系結(jié)構(gòu)不受動作順序的限制,因為依照本發(fā)明,有些動作會以不同順序和/或與這里所示和描述的其他動作同時發(fā)生。例如,本領(lǐng)域的技術(shù)人員會理解,方法可以選擇性地被表示為諸如狀態(tài)圖中一系列互相關(guān)連的狀態(tài)或事件。此外,不是所有示出的動作都是實現(xiàn)依照該體系結(jié)構(gòu)的方法所必需的。
在300處,提供了核心數(shù)據(jù)管理層,用于對結(jié)構(gòu)化的、半結(jié)構(gòu)化的和非結(jié)構(gòu)化的數(shù)據(jù)類型建模并將它們存儲在數(shù)據(jù)存儲器中。在302處,CDP 110層被應(yīng)用到核心數(shù)據(jù)管理層上,以便提供對應(yīng)用程序框架支持豐富數(shù)據(jù)模型、映射、查詢和數(shù)據(jù)訪問機制的數(shù)據(jù)服務(wù)。在304處,一個或多個應(yīng)用程序框架覆蓋CDP。在306處,在每個應(yīng)用程序框架內(nèi)提供一個或多個應(yīng)用程序,這些應(yīng)用程序框架現(xiàn)在可以經(jīng)由CDP提供的數(shù)據(jù)服務(wù)來訪問數(shù)據(jù)存儲的數(shù)據(jù)。
圖4示出了該體系結(jié)構(gòu)的CDP組件的示意框圖。應(yīng)該理解,該示意圖中任何組件和/或框的定位并不意味著(或必須防止)跨進程/機器邊界的任何特定的部署。CDP使用優(yōu)化并發(fā)性模型,這樣使得如果要保存變化,且已經(jīng)對底層數(shù)據(jù)作了其他改變,那么沖突檢測以應(yīng)用程序?qū)S玫姆绞絹斫鉀Q它。為了成為有效的數(shù)據(jù)平臺,CDP包括諸如編程語言集成、豐富數(shù)據(jù)建模、持久化框架、服務(wù)等特征。API 108便于語言集成和應(yīng)用程序400經(jīng)由CDP運行庫110對存儲器202進行數(shù)據(jù)訪問。域不可知意味著CDP對數(shù)據(jù)的特性和形態(tài)以及對其所需的語義約束作出最少的假設(shè)。為此,CDP提供了以下特征(在下文中更為詳細地描述)公用數(shù)據(jù)模型(CDM)在CDP運行庫110的中心是CDM 402。CDM 402的目標是析出跨多個應(yīng)用程序域(從主要對用戶數(shù)據(jù)工作的應(yīng)用程序(PIM,文檔等)到LOB和企業(yè)數(shù)據(jù))公用的建模概念。除了提供豐富對象和關(guān)系抽象之外,CDM 402提供了對結(jié)構(gòu)化的、非結(jié)構(gòu)化的和半結(jié)構(gòu)化的數(shù)據(jù)的支持。
行/實體數(shù)據(jù)-CDM 402支持豐富實體關(guān)系模型,以便捕捉結(jié)構(gòu)化數(shù)據(jù)(例如業(yè)務(wù)數(shù)據(jù))的結(jié)構(gòu)和行為。CDM 402是核心關(guān)系型模型的超集,其中具有對豐富對象抽象和關(guān)系建模的擴展(例如文檔和聯(lián)系人之間的作者關(guān)系;采購訂單和訂單線之間的線關(guān)系)。
文件數(shù)據(jù)-CDM 402支持“文件流”數(shù)據(jù)類型,以便存儲和操縱非結(jié)構(gòu)化(文件)數(shù)據(jù)。文件流數(shù)據(jù)類型可以將數(shù)據(jù)存儲為文件并支持文件訪問API。SQL服務(wù)器中本身就支持映射到NTFS文件流的文件流數(shù)據(jù)類型,并支持所有基于文件句柄/流的操作。除將非結(jié)構(gòu)化內(nèi)容建模為CDM 402中的文件流之外,使用實體類型,有用的內(nèi)容可以被升級為結(jié)構(gòu)化屬性?;跀?shù)據(jù)庫的文件存儲系統(tǒng)定義了文件后備項的概念,文件后備項是對結(jié)構(gòu)化屬性以及非結(jié)構(gòu)化內(nèi)容的文件流建模的實體。文件后備項提供了相關(guān)聯(lián)的文件流上的豐富查詢以及基于流的操作。
XML數(shù)據(jù)-XML文檔可以被建模為CDM 402中兩種主要的方式(1)將其存儲為XML數(shù)據(jù)類型;(2)將XML文檔映射到一個或多個實體(例如類似于數(shù)據(jù)契約)。CDM 402支持SQL服務(wù)器中所支持的XML數(shù)據(jù)類型。XML數(shù)據(jù)類型可以是任意實體屬性的類型;XML數(shù)據(jù)類型允許存儲非類型化或類型化的XML文件。通過將一個或多個XML模式與XML文件屬性相關(guān)聯(lián),提供了強類型化。
API 108中的編程語言集成,包括查詢核心CDP特征組件-會話和事務(wù)404、查詢406、持久化408、指針410、服務(wù)412、對象高速緩存414和業(yè)務(wù)邏輯主機416被封裝在CDP API 108中可用的幾個“運行庫”類中(例如StorageContext(存儲環(huán)境))?;谠贑DM 402中創(chuàng)作的類型,CDP設(shè)計時工具生成強類型化的CLR(公共語言運行庫)類。CDP要求對由CDM 402定義的類型化系統(tǒng)的查詢語言。CDP可支持C#序列操作符和OPATH作為其查詢語言。為了本申請的目的,CDP所支持的查詢語言一般被稱為公共查詢語言(CQL)。CQL被設(shè)想成包括核心關(guān)系型代數(shù)(例如,選擇、結(jié)合和項操作符)。雖然其句法可能與SQL不同,但CQL可以用直接的方式被映射到SQL。CQL允許對程序設(shè)計員所處理的對象結(jié)構(gòu)進行豐富查詢。目標是使得CQL與C#組所作的序列操作符工作結(jié)合。這些特征有效地提供了對存儲在關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS)中(或者任何其他啟用了CDP的存儲)的數(shù)據(jù)的強類型化的、基于對象的抽象。此外,CDP的持久化框架可以用于持久地堅持和查詢無格式普通CLR對象(POCO)。
持久化引擎-持久化引擎提供了聲明性映射定義,它描述了對象是如何從來自關(guān)系型存儲的組件片段組裝的。該引擎包括查詢生成組件(未示出),它按照對象查詢表達式采用由查詢處理器定義的表達式,并接著將其與聲明性映射相組合。這轉(zhuǎn)換成訪問數(shù)據(jù)庫中的底層表的等價查詢表達式。更新生成組件(未示出)查找改變跟蹤服務(wù),并在映射元數(shù)據(jù)的協(xié)助下描述如何將對象領(lǐng)域中的那些改變轉(zhuǎn)換成表領(lǐng)域中的改變。
查詢/搜索文件和XML數(shù)據(jù)-如上所解釋的,CDM 402分別使用文件流和XML數(shù)據(jù)類型來存儲非結(jié)構(gòu)化的和半結(jié)構(gòu)化的數(shù)據(jù)。CQL能夠查詢這些數(shù)據(jù)類型。對于被升級為結(jié)構(gòu)化實體(例如WinFS文件后備項)的文件內(nèi)容,CQL的關(guān)系型操作符可以查詢這些實體??梢允褂萌谋舅阉鱽聿樵儽淮鎯槲募鞯姆墙Y(jié)構(gòu)化數(shù)據(jù)??梢允褂肵Path或XQuery來查詢XML內(nèi)容。
對象-關(guān)系映射由于CDP在關(guān)系型(表式)存儲之上提供了基于對象的抽象,因此需要提供O-R映射組件。CDP支持命令性映射(CDP描述映射如何發(fā)生)和非命令性映射(類型設(shè)計者在指定映射方面具有某些靈活性)。注意,當今的基于數(shù)據(jù)庫的文件存儲系統(tǒng)實現(xiàn)使用命令性的映射,而更一般的O-R持久化框架需要非命令性映射。
高速緩存CDP運行庫維護查詢結(jié)果(例如指針)和未被提交的更新的高速緩存。這被稱為會話高速緩存。CDP也提供顯式高速緩存,它允許應(yīng)用程序以斷開模式工作。CDP為顯式高速緩存中的數(shù)據(jù)提供各種一致性保證。高速緩存通過將數(shù)據(jù)的盤上身份與存儲器中的對象相關(guān)來執(zhí)行身份管理。
查詢處理器當查詢存儲時,CQL查詢被映射到SQL;然而,當查詢顯式高速緩存時,CQL查詢由QP組件處理。數(shù)據(jù)庫訪問是經(jīng)由查詢處理器來完成的。查詢處理器允許多個前端來處理要表達并接著被映射到內(nèi)部規(guī)范格式的多個查詢語言。這是按照它所處理的應(yīng)用程序的域模型和對象來完成的。查詢接著被傳遞到處理器(這是管道),被接著被轉(zhuǎn)換成后端專用查詢。
指針CDP提供僅前向和可滾動指針。指針支持通告、使用展開/折疊狀態(tài)的多級分組、動態(tài)排序以及過濾。
業(yè)務(wù)邏輯主機CDP提供運行時環(huán)境以便主存類型/實例和操作的數(shù)據(jù)中心邏輯。這種數(shù)據(jù)中心業(yè)務(wù)邏輯不用于應(yīng)用程序/業(yè)務(wù)過程邏輯,后者可以主存在應(yīng)用程序服務(wù)器中。對象不僅是數(shù)據(jù)庫中的行。當對象在存儲器中物化后,它們實際上是具有應(yīng)用程序可調(diào)用的行為的對象。在系統(tǒng)中有擴展點,它們主要是所有在運行時操作以擴展CDP的事件和回叫。這些對象不僅是對象,而是CLR對象、.NET對象等。CDP允許截取這些對象中的屬性剩余方法調(diào)用。應(yīng)用程序可以定制這些對象的行為。
服務(wù)CDP提供對所有CDP客戶機可用的一組核心服務(wù)。這些服務(wù)包括規(guī)則、改變跟蹤、沖突檢測、事件處理以及通告。事件處理擴展了來自框架級服務(wù)或用于應(yīng)用程序的CDP運行庫110以添加附加行為,且還用于用戶界面處的數(shù)據(jù)綁定。
約束CDP提供約束/安全組件112以便允許類型化設(shè)計者至少能夠聲明性地創(chuàng)作一個約束。這些約束在存儲中執(zhí)行。一般地,CDP約束的范圍包括諸如長度、精度、比例、默認值、校驗等概念。這些約束在運行時由CDP約束引擎來強制實施。
安全CDP提供了基于角色的安全模型-用戶的憑證確認其“角色”(諸如管理員、權(quán)限高的用戶、批準者等)。每個角色被分配一組訪問權(quán)限。CDP的安全引擎強制實施這些安全策略。此外,CDP提供安全模型以便控制對CDP中實體的訪問。安全模型可以支持對操作系統(tǒng)用戶的認證、實體的授權(quán)級別(例如,對讀和更新有分開的權(quán)限)等。
注意,約束/安全組件112被示為與CDP運行庫組件110分離,因為它可以作為與其分離的實體來運作?;蛘撸赡芨鼮橛行У氖?,約束/安全組件112與存儲器組件202相結(jié)合,存儲器組件可以是數(shù)據(jù)庫系統(tǒng)。
一起考慮,這些特征提供了強大的平臺,用于開發(fā)可以跨不同的層來靈活部署的數(shù)據(jù)中心應(yīng)用程序和邏輯。注意,該圖中運行庫組件(或框)的定位并不意味著(或者必須防止)跨進程/機器邊界的任何特定部署。它是用于示出功能組件的示意圖。
CDP體系結(jié)構(gòu)的關(guān)鍵優(yōu)點之一是它提供了實現(xiàn)的靈活性。這意味著以下兩點1)圖4所示的某些組件是“移動的”,這意味著它們可以存活于不同的進程/層中。特別地,約束/安全引擎112一般存活于圖2的存儲進程202中。
2)不是圖4中示出的所有組件都需要被實現(xiàn)以便具有全功能的數(shù)據(jù)平臺。特別地,對象高速緩存414可以僅由一個會話高速緩存組成。在另一個實現(xiàn)中,緩存414可以包括將與存儲同步的顯式高速緩存。查詢處理器406對對象高速緩存414中的對象進行操作。
在下文中更為詳細地描述了CDP的若干個特征和/或組件。如上所述,CDP的中心是公用數(shù)據(jù)模型(CDM)402,其中CDM 402的意圖是析出跨多個應(yīng)用程序域公用的建模概念,這些應(yīng)用程序從主要處理用戶數(shù)據(jù)(例如PIM、文件等)的應(yīng)用程序到LOB和企業(yè)數(shù)據(jù)。一般而言,有兩種可能的技術(shù)可用于實現(xiàn)這樣的功能1)專用于每個可想象的(或可想到為重要的)域的模型概念。例如,精確地定義“顧客”的含義(從LOB域)和“人員”的含義(從用戶域)等等;以及2)提供應(yīng)用程序設(shè)計者可以在其上創(chuàng)建它們自己的域?qū)S妙愋?、約束、關(guān)系的靈活基礎(chǔ)。CDM 402使用第二種方法,這樣使得它提供一組基本類型,并定義了靈活的框架用于創(chuàng)作新類型。在這種意義上,CDM 402可以是數(shù)據(jù)模型(例如它實際上定義了某些類型的它們的語義),且也可以是數(shù)據(jù)元模型(例如,它允許其他模型的規(guī)范)。
以下討論CDM 402的某些特征,但是它們不應(yīng)作為對本申請的限制。數(shù)據(jù)模型可以包括關(guān)系型數(shù)據(jù)模型。換言之,CDM 402展示了表、表上的行、查詢和更新的概念。CDM 402可為數(shù)據(jù)定義比表和行更豐富的對象抽象。特別地,它允許使用諸如實體、實體間的關(guān)系、繼承、包含及其集合等概念對真實世界的人工制品進行建模。此外,CDM 402可以通過將編程語言類型系統(tǒng)與其中建模的應(yīng)用程序抽象緊密結(jié)合,將應(yīng)用程序結(jié)構(gòu)和存儲結(jié)構(gòu)之間的阻抗不匹配最小化。此外,可以提供對應(yīng)用程序行為(例如方法、功能)和對行為的靈活部署的支持以便啟用雙層和多層應(yīng)用程序。CDM 402也可以捕捉獨立于底層物理存儲的持久化語義,從而允許在各種各樣存儲上實現(xiàn)對CDM 402的啟用。
CDM 402可以調(diào)用多個概念。以下概念可由要實現(xiàn)的元模型使用來設(shè)計域?qū)S脭?shù)據(jù)模型。特別地,以下概念可以看作是CDM 402的核心1)實體類型可以是應(yīng)用程序設(shè)計者對屬性和方法的分組的規(guī)范,其中實體是實體類型的實例??梢岳斫?,可以通過繼承分層結(jié)構(gòu)來組織實體類型;2)表是實體的集合,它可以是其他實體的屬性。使用實體、繼承和表,應(yīng)用程序可以遞歸地定義數(shù)據(jù)分層結(jié)構(gòu)。表可以被強類型化,在此意義上,給定的表僅包括給定類型或其子類型的實體;3)表集可以是其屬性為表的實體。這是使用表和實體定義的遞歸數(shù)據(jù)分層結(jié)構(gòu)的基本范例。它可以實質(zhì)上類似于數(shù)據(jù)庫的概念;以及4)關(guān)系可以表達實體之間的語義連接。應(yīng)該理解,關(guān)系可以被擴展來定義關(guān)聯(lián)、包含等。
實體、關(guān)系和/或表集定義可以在例如模式的上下文中發(fā)生。為了本申請的目的,模式的主要目的是定義用于對在模式中定義的元素的名字定范圍的名字空間。表集可以形成CDM 402的“頂層”??梢酝ㄟ^創(chuàng)建表集來直接和/或間接地分配存儲。例如,以下偽代碼示出了表集的一個例子<Schema Namespace="MySchemas.MyLOB">
<TableSetType Name="LOBData">
<Property Name="Orders"Type="Table(Order)"/>
<Property Name="Customers"Type="Table(Customer)"/>
<Property Name="Products"Type="Table(Product)"/>
<Property Name="Suppliers"Type="Table(Supplier)"/>
<Property Name="PSLinks"Type="Table(ProductSupplierLink)"/>
</TableSetType>
<TableSet Name="LOB"Type="TableSetType"/>
</Schema>
Entity(實體)類型可以具有與其相關(guān)聯(lián)的屬性和方法。為了指定屬性類型、方法參數(shù)和方法返回值,CDM 402提供了若干內(nèi)置類型1)簡單類型Int32、串、其他CLR值類型;2)枚舉類型等價于CLR枚舉;3)引用類型(在下文中討論);以及4)數(shù)組類型經(jīng)排序的內(nèi)聯(lián)類型集合(在下文中討論)。這些內(nèi)建類型的屬性可以被分組在一起以形成內(nèi)聯(lián)類型,其中內(nèi)聯(lián)類型可以具有其他內(nèi)聯(lián)類型的成員。以下是上述的一個示例
<InlineType Name="Address">
<Property Name="Line1"Type="String"Nullable="false">
<Length Maxiumum="100"/>
</Property>
<Property Name="Line2"Type="String"Nullable="true">
<Length Maxiumum="100"/>
</Property>
<Property Name="City"Type="String"Nullable="false">
<Length Maxiumum="50"/>
</Property>
<Property Name="State"Type="String"Nullable="false">
<Length Minimum="2"Maximum="2"/>
</Property>
<Property Name="ZipCode"Type="String"Nullable="false">
<Length Minimum="5"Maximum="5"/>
</Property>
</InlineType>
可以通過利用內(nèi)建類型和/或內(nèi)聯(lián)類型來構(gòu)建實體。例如,以下偽代碼示出了實體<EntityType Name="Customer"Key="CustomerId">
<Property Name="CustomerId"Type="String"Nullable="false">
<Length Minimum="10"Maximum="10"/>
</Property>
<Property Name="Name"Type="String"Nullable="false">
<Length Maximum="200"/>
</Property>
<Property Name="Addresses"Type="Array(Address)">
<Occurs Minumum="1"Maximum="3"/>
</Property>
<NavigationProperty Name="Orders"Association="OrderCustomer"FromRole="Customer"ToRole="Orders"/>
</EntityType>
至少部分地基于由于表集是頂層組織單元,且表集是由表格組成的,因此實體(除表集之外)可以包含在表中。在表范圍內(nèi),每個實體可以具有唯一的關(guān)鍵字值。在存儲器級范圍處,每個實體可以具有唯一的身份-其關(guān)鍵字值與其表的身份遞歸地串接。實體可以是CDM 402中可以由關(guān)鍵字和/或身份引用的最小單位。存儲操作可以以實體為目標,其中操作可以是,但不限于,持久化、存儲、移動、復(fù)制、刪除、重命名、備份、恢復(fù)等等。內(nèi)聯(lián)類型實例可以用在包含實體的上下文中。CDM 402可以定義抽象實體類型的概念,它們實質(zhì)上類似于CLR中的抽象類。換言之,它們不能被直接例示;它們僅可被導(dǎo)出以創(chuàng)建其他可例示類型。
實體引用可以被定義為對實體的持久的、持續(xù)的引用。引用值的范圍包括實體身份。間接實體得出其引用,解除引用得出實體實例。引用的主要目的是啟用實體共享例如,對于Ref(Customer)屬性而言,同一顧客的所有訂單將實質(zhì)上具有類似的值,這樣使得定單(order)實體被認為是共享顧客(customer)實體(例如以下代碼示例中代碼的第六行是一個示例)。
與CDM 402相關(guān)聯(lián)的數(shù)據(jù)在其組成部分之間有關(guān)系。關(guān)系模型并不明確地支持關(guān)系;PK/FK/引用完整性提供了以有限的方式實現(xiàn)關(guān)系的工具。然而,CDM 402支持使用關(guān)聯(lián)和合成對關(guān)系的顯式概念建模。示出以下示例以便理解關(guān)聯(lián)和合成的性能1.<EntityType Name="Order"Key="OrderId">
2.<Property Name="OrderId"Type="String"Nullable="false">
3. <Length Minimum="10"Maximum="10"/>
4.</Property>
5.<Property Name="Date"Type="DateTime"Nullable="false"/>
6.<Property Name="Customer"Type="Ref(Customer)"7. Association="OrderCustomer"/>
8.<Property Name="Lines"Type="Table(OrderLine)"9. Composition="OrderOrderLine"/>
10. <Property Name="ShippingAddress"Type="Address"Nullable="false"/>
11.</EntityType>
12.<Association Name=”O(jiān)rderCustomer”>
13.<End Role=”O(jiān)rderRole”Type=”O(jiān)rder”Multiplicity=”*”14.Table=”SalesData.Customers”/>
15.<End Role=”CustomerRole”Type=”Customer”Multiplicity=”1”/>
16.<Reference FromRole=”O(jiān)rderRole”ToRole=”CustomerRole”Property=”Customer”/>
17.</Association>
18.<Composition Name="OrderOrderLine">
19.<ParentEnd Role="Order"Type="Order"Property="Lines"/>
20.<ChildEnd Role="OrderLine"Type="OrderLine"Multiplicity="100"/>
21.</Composition>
關(guān)聯(lián)可以表示實體之間的對等關(guān)系。在以上示例中,訂單經(jīng)由關(guān)聯(lián)與顧客相關(guān)。在上述代碼示例中,第6行示出了訂單具有相關(guān)聯(lián)的顧客(它是由引用屬性Customer來指定的)。關(guān)聯(lián)的特性在12-15行定義它表示OrderCustomer關(guān)聯(lián)是從Order到Customer(15行);它也表示對于每個Customer(在14行,Multiplicity=“1”),可以有多個Order(在13行,Multiplicity=“*”)。上述的關(guān)聯(lián)類型可以被稱為引用關(guān)聯(lián)。
CDM 402定義了兩種其他類型的關(guān)聯(lián)值關(guān)聯(lián)和關(guān)聯(lián)實體的關(guān)聯(lián)。值關(guān)聯(lián)允許通過任何屬性表達關(guān)系,而非僅通過身份引用(例如Document.Author屬性經(jīng)由相等條件與Contact.Name相關(guān))。關(guān)聯(lián)實體允許關(guān)系的建模,其中關(guān)系本身帶有一些數(shù)據(jù)(例如在公司和個人之間的雇傭關(guān)系帶有如雇傭期限或在公司中人員等級和職位等屬性)。
合成可以表示父子關(guān)系和/或包含關(guān)系??紤]Order和OrderLine(訂單線)(例如Order是在網(wǎng)站上放入購物車的貨物總數(shù);OrderLine是車中的每個個別項一書、DVD等)。每個OrderLine只有在Order的環(huán)境下才有意義。OrderLine不可能在包含Order之外獨立存在。換言之,OrderLine包含在Order中,其使用期是由Order的使用期確定的。
上述關(guān)系可以使用合成來建模。行8示出了合成的一個示例。Line屬性和OrderOrderLine合成(18-22行)表示訂單控制其線,且線依賴于包含它們的訂單。應(yīng)該理解訂單是父,線是子。合成和內(nèi)聯(lián)類型的主要區(qū)別是合成涉及實體。換言之,OrderLine可能是引用的目標,而內(nèi)聯(lián)類型不能在上述示例中。
CDM 402及其關(guān)系的顯式建模的一個好處是它提供了對查詢的元數(shù)據(jù)支持。也可以使用上行查詢。例如,給定一顧客,可以通過在CDM 402中實現(xiàn)NavigationProperty(導(dǎo)航屬性)來找到所有的訂單(而無需存儲顯式反向指針)。這在上述代碼段的28行示出,且為方便起見在以下復(fù)制28.<EntityType Name="Customer"Key="CustomerId">
29. <NavigationProperty Name="Orders"Association="OrderCustomer"FromRole="Customer"ToRole="Orders"/>
30.</EntityType持久化引擎408可以包括對象-關(guān)系映射。換言之,CDP提供的建模、訪問和查詢抽象是基于對象的。CDP所使用的主要存儲技術(shù)是基于關(guān)系的(例如SQL2000)。持久化引擎408使用對象.關(guān)系映射(也稱為“O-R映射”),其中持久化引擎可以將語言類映射到底層表式表示。
當考慮O-R映射,持久化引擎408可以提供兩種情況1)命令性O(shè)-R映射;以及2)非命令性O(shè)-R映射。命令性O(shè)-R映射是CDP類型之間的映射,其中它們的關(guān)系表示可以被硬編碼到CDP中。類型設(shè)計者在選擇底層表的格式時具有很小和/或沒有靈活性。其一個示例可以是基于數(shù)據(jù)庫的文件存儲系統(tǒng)。非命令性O(shè)-R映射是開發(fā)人員在選擇CLR類如何映射到底層存儲結(jié)構(gòu)時具有不同程度的靈活性的映射??梢钥紤]兩種子情況。1)將現(xiàn)有關(guān)系模式展示為對象。類型設(shè)計者使用高級規(guī)范語言來設(shè)計CDM類型、使用工具來生成基于它們的類、使用靈活性來指定類型如何映射到表。當CDP應(yīng)用程序與現(xiàn)有關(guān)系型應(yīng)用程序并排開發(fā)時(在使用實質(zhì)上類似數(shù)據(jù)的意義上),發(fā)生這種情況。例如,汽車公司的IT部門可以具有LOB應(yīng)用程序,其中它希望編寫針對同一數(shù)據(jù)的CDP應(yīng)用程序(可能是逐步遷移策略的一部分)。但是要求是LOB應(yīng)用程序和新的CDP應(yīng)用程序一起針對同一數(shù)據(jù)運行。2)將類集合持久保存到關(guān)系模式中。開發(fā)人員不使用生成的類;而是使用自己設(shè)計的類。開發(fā)人員希望將這些類映射到關(guān)系型模式。應(yīng)該理解,有很多產(chǎn)生這種要求的情況。
CDP還可以包括可以在設(shè)計期間使用的編程接口(未示出)??梢允沟镁幊探涌趯DP應(yīng)用程序設(shè)計者和/或程序員可用。編程接口可以被類型化為三種通用方面1)設(shè)計時編程工具(例如,用于使得類型設(shè)計者能夠創(chuàng)作CDM類型及其約束,從這些類型生成CLP類,以及將行為添加到類型中的工具);2)API(例如,用于編寫CDP應(yīng)用程序的類和方法);以及3)查詢(例如,用于查詢諸如實體實例等CDM對象的語言)。這些編程表面的組件協(xié)同工作,以便提供對底層存儲數(shù)據(jù)的強類型化的、基于對象的抽象。
CDP提供了聲明性的公共模式定義語言(CSDL),它類似于SQL的數(shù)據(jù)定義語言或C#的類定義,用于定義實體類型、實體表、實體類型之間的關(guān)系以及約束。有三種主要的設(shè)計時組件1.API生成器。應(yīng)用程序設(shè)計者使用CSDL設(shè)計CDM類型和關(guān)系,并使用稱為APIG(發(fā)音是ay-pig)的設(shè)計時CDP工具,該工具生成對應(yīng)于這些類型和關(guān)系的部分CLR類。由APIG生成的類作為程序集對應(yīng)用程序編程者可用,并且可以由它們的應(yīng)用程序用C#的using子句來引用。在某種意義上,由APIG生成的類是規(guī)范類;它們可以是應(yīng)用程序內(nèi)的CDM類型的直接表示。在一個示例中,應(yīng)用程序類可以在它們的定義中有約束-諸如當應(yīng)用程序使用預(yù)先編寫的類庫(圖包、數(shù)學(xué)包等)的類時。應(yīng)用程序可以使用CDP的對象持久化框架在存儲中持久地存儲并查詢這些類的實例。這些對象可以被稱為無格式普通CLR對象,即POCO。CDP也支持POCO的情況。
2.關(guān)系-對象映射。CSDL的該組件幫助應(yīng)用程序設(shè)計者聲明存儲概念之間具體的、非命令性的映射,諸如表和視圖以及CLR類。它也指定了如何能夠?qū)凑誄DM 402定義的約束映射到SQL聲明性約束、觸發(fā)器或存儲過程。
3.行為。CSDL使得應(yīng)用程序設(shè)計者能夠確定業(yè)務(wù)邏輯的哪個部分被實現(xiàn)為實例方法、靜態(tài)函數(shù)、存儲過程。它也確定了其上可以運行邏輯的層(例如CDP運行庫與存儲)。
編程接口還可以包括CDP、API,可以對照該API來編寫編程表面應(yīng)用程序。CDP API可以具有三個子部分1.一般CDP數(shù)據(jù)訪問。這是API中展示存儲、會話、事務(wù)(例如StorageContext)、查詢服務(wù)(例如StorageSearcher)和CRUD服務(wù)(例如SaveChanges)的部分。
2.CDM數(shù)據(jù)類。這是規(guī)范的、應(yīng)用程序無關(guān)的類,它展示了諸如實體、關(guān)系、擴展等CDM概念。
3.域數(shù)據(jù)類。這是應(yīng)用程序/框架專用類,諸如Contact(聯(lián)系人)、Message(消息)、PurchaseOrders(采購訂單)等,它們符合CDM 402,但是具有域?qū)S玫膶傩院托袨椤?br> CDM 402也可以定義查詢語言,即CQL。CQL被設(shè)計成允許對程序員處理的對象結(jié)構(gòu)進行豐富查詢。以下是用作CQL形式基礎(chǔ)的三個標識的技術(shù)1.OPathOPath語言的根源在SQL和XPath中,且被設(shè)計成XPath的CLR對象版本。設(shè)計構(gòu)建在路徑表達式的XPath概念之上,以便揭示出依次解除對象屬性的引用的方法。設(shè)計是基于一個簡單的原理開發(fā)人員希望看到對象集合在面向?qū)ο蟮腁PI中作為主要“結(jié)構(gòu)”構(gòu)造。OPath可以是基于數(shù)據(jù)庫文件存儲系統(tǒng)的POR查詢形式。
2.對象SQL該方法擴展了SQL查詢語言,以操作CDM對象的圖和集合。Windows查詢語言(WinQL)是被設(shè)計成SQL查詢和操作CRL對象的圖的SQL的變體,它是SQL中所需的擴展的候選設(shè)計。
3.C#序列操作符這是用于強類型化的、編譯時檢查的查詢和可以應(yīng)用于CLR對象的暫時或持久集合的寬泛類的設(shè)置操作(例如,經(jīng)由關(guān)系-對象映射)的一組C#擴展。
從策略上而言,C#序列操作符方法對于成為CQL的框架是最有意義的。CQL是一種查詢語言。創(chuàng)建、更新、刪除是作為對象操作(新的、屬性設(shè)置器等)來執(zhí)行的。持久化引擎408中的O-R映射組件可以將這些操作映射到SQL的底層DML操作中。
以下描述CDM類型和編程表面之間的關(guān)系。在CDM 402中“類型”的概念可以從三個不同的級別來看1.模式空間在CDM模式中對類型的描述。這些是抽象類型,意為它們在運行時棧的任何組件中可能不會被顯式地物化(例如從應(yīng)用程序一直到存儲)。
2.應(yīng)用程序空間在CDP API中將類型表示為CLR類。在模式空間中的實體/內(nèi)聯(lián)類型和應(yīng)用程序空間中的數(shù)據(jù)類之間可以是1-1的對應(yīng)關(guān)系。換言之,CDM方案中的每一實體和內(nèi)聯(lián)類型可導(dǎo)致一個CLR類。通常,這些類由APIG自動生成;然而,在POCO的情況下,開發(fā)人員可以明確地指定在CLR類和模式空間中的類型之間的映射。除了用于實體和內(nèi)聯(lián)類型的類之外,應(yīng)用程序空間也可以包括關(guān)系類。
3.存儲空間底層存儲中類型的持久格式。如果存儲是關(guān)系型存儲,那么這些類型是表/UDT/核心SQL類型。CDP的O-R映射組件支持允許將模式空間中的類型映射到存儲空間中的類型的映射模式(例如采購訂單實體類型可以被映射到SQL服務(wù)器的PurchaseOrder表中)。
CDP查詢語言以應(yīng)用程序空間為目標。這是有意義的,因為開發(fā)人員期望使用實質(zhì)上類似于他們用于其他操作(例如對象和集合)的抽象來查詢。然而,使用CDM抽象(模式空間)來描述CQL的語義。
CDP也可以包括約束/安全性112。當在數(shù)據(jù)的較大語義上下文中檢查時,幾乎所有的數(shù)據(jù)會在其類型域上有某一或另一形式的約束。對于CDP而言,為類型和應(yīng)用程序設(shè)計者提供一種表達這些約束的方式是很重要的。CSDL可以用于在類型設(shè)計時聲明性地創(chuàng)作約束。約束的示例包括但不限于1)簡單類型約束,諸如長度、精度、比例、默認值以及校驗;2)數(shù)組類型約束,諸如元素約束、出現(xiàn)、唯一以及校驗;以及3)屬性約束等。
這些約束可以在運行時由CDP約束引擎來強制實施。注意,真正符合CDM 402的動作意味著一組可以從底層關(guān)系型存儲級得出的約束。例如,CDM 402要求“每個實體在其約束表范圍內(nèi)具有唯一的關(guān)鍵字”。在存儲級,這被轉(zhuǎn)換成唯一關(guān)鍵字約束。這樣的約束有若干個其他示例。這里的要點是CDP約束引擎強制實施兩種類型的約束由CDM 402所隱含(和符合CDM 402所需)的約束,以及由類型設(shè)計者創(chuàng)作的約束。除了在CSDL中創(chuàng)作的聲明性約束之外,可以使用SQLServer的存儲過程來編寫約束。相比聲明性語言所可能表達的,這種方法允許表達更為復(fù)雜的約束。
此外,約束/安全性112可以提供安全模型,以便控制對CDP中的實體的訪問。用于CDP的安全模型必須至少滿足以下情況認證安全模型可以支持認證操作系統(tǒng)用戶。這包括域、工作組或斷開的客戶機中的用戶。它也可以包括對基于NTLM和Kerbero的認證的支持。
授權(quán)CDP安全模型可以至少在實體級支持安全授權(quán)。它也必須允許管理對實體的讀取和更新的單獨的權(quán)限。至少,約束/安全112規(guī)定實體的“屬性”和/或?qū)傩约灰暈閷嶓w的安全標識符。實體的訪問權(quán)限是由與將安全標識符作為參數(shù)的表相關(guān)聯(lián)的函數(shù)來確定的。CDP應(yīng)該也允許分別從能夠改變剩余實體的用戶中規(guī)定能夠改變安全標識符的用戶。應(yīng)該理解,CDP可以支持基于更為通用的角色的模型,這也允許與僅讀和寫不同的權(quán)限。
CDP運行庫110維護查詢結(jié)果(例如在下文中詳細討論的指針)和未被提交的更新的高速緩存414(例如對象高速緩存414),其中這樣的高速緩存可以被稱為會話高速緩存,因為它綁定到會話、事務(wù)404。此外,它在會話開始創(chuàng)建時開始存在,在會話終止時消失。CDP會話被封裝在StorageContext(存儲上下文)對象中。應(yīng)用程序可以例示StorageContext的多個實例,由此啟動多個會話并因此啟動多個會話高速緩存。CDP也可以展示另一種類型的高速緩存,稱為顯式高速緩存。顯式高速緩存為來自一個或多個查詢的數(shù)據(jù)提供了高速緩存。一旦數(shù)據(jù)被物化到顯式高速緩存中,就可以提供以下數(shù)據(jù)一致性保證1)只讀、非授權(quán)性;2)直寫、授權(quán)性;以及3)經(jīng)由外部通知自動刷新。對于顯式高速緩存的編程和查詢模型可以實質(zhì)上類似于存儲數(shù)據(jù)的模型。
指針、規(guī)則410是允許一次處理一個從CQL返回的數(shù)據(jù)實體集的機制。應(yīng)用程序可以通過簡單地將整個結(jié)果集復(fù)制到存儲器中并在存儲器結(jié)構(gòu)中其頂部覆蓋滾動模式在結(jié)果集上創(chuàng)建指針。但是該要求的普遍性以及在實現(xiàn)指針時有時涉及的復(fù)雜性(尤其當考慮更新、分頁等時)意味著任何數(shù)據(jù)平臺都應(yīng)該提供指針模型。
CDP同時提供僅前向和可滾動指針。處瀏覽和滾動的基本功能之外,CDP指針提供以下特征1)外部通知和維護;2)對展開/折疊狀態(tài)進行多級分組;以及3)動態(tài)排序和過濾(例如“后處理”)。應(yīng)該理解,指針可以不是指定結(jié)果集的不同機制;結(jié)果集是由查詢指定的,且指針是在這些查詢之上。
CDP也可以包括業(yè)務(wù)邏輯主機416。當多個應(yīng)用程序操縱實質(zhì)上類似的數(shù)據(jù)時,關(guān)鍵的要求是確保數(shù)據(jù)保持可信性-即,確保數(shù)據(jù)符合各種確認規(guī)則、業(yè)務(wù)規(guī)則和由類型設(shè)計者和/或數(shù)據(jù)持有人創(chuàng)立的校驗和平衡的任何其他系統(tǒng)。應(yīng)用程序一般是不可信的是很好的假設(shè)。由于無法預(yù)料的使用模式的愚蠢的、惡意的和/或簡單的緊急需要,應(yīng)用程序保存和/或試圖保存無效值。例如,用戶可以輸入292作為區(qū)域代碼,即使292是無效的區(qū)域代碼且由此電話號碼字段中的值不再表示電話號碼,應(yīng)用程序也保存該數(shù)字。換言之,它不能被“信任”為電話號碼。防止這一現(xiàn)象的通常做法是創(chuàng)建信任邊界聲明性規(guī)則/確認代碼/等的某一主體(通常被稱為業(yè)務(wù)邏輯),它在單獨的進程中運行,且檢查由應(yīng)用程序作出的數(shù)據(jù)改變以便“批準”這樣的改變。接著它可以將這些改變保存到存儲中。許多時候,業(yè)務(wù)邏輯不限于檢查和批準;它也強制實施業(yè)務(wù)規(guī)則,使得工作流發(fā)生等(例如當插入新顧客時,應(yīng)該發(fā)送電子郵件給信用檢查部分以便確保信用價值)。
CDP提供用于創(chuàng)作業(yè)務(wù)邏輯(BL)的若干機制。這些機制可以被分成以下5類約束、事件處理程序、靜態(tài)/實例方法、可綁定行為以及境外服務(wù)方法,它們中的每一個會在下文中更為詳細地討論。如上文所述的約束/安全性112可以是聲明性的和程序上的。這些約束可以在存儲上接近于數(shù)據(jù)而執(zhí)行。因此,約束112被認為在信任邊界之內(nèi)。此外,這些約束也可以由類型設(shè)計者來創(chuàng)作。
業(yè)務(wù)邏輯主機416可以采用事件處理程序。CDP API對數(shù)據(jù)改變操作引發(fā)若干事件。BL作者可以經(jīng)由處理程序代碼掛鉤到這些事件。例如,考慮訂單管理應(yīng)用程序。當有新訂單時,應(yīng)用程序需要確保訂單值小于對該客戶授權(quán)的信用限制。這個邏輯可以是在將訂單插入到存儲中之前運行的事件處理程序代碼的一部分。
一般而言,可以有以下類型的事件1)確認(例如,這些事件為感興趣的一方提供檢查所建議的值并確認它的機會);2)預(yù)保存(例如,正好在將改變保存到存儲之前引發(fā)該事件,且該事件可以在意向和行為上實質(zhì)上類似于SQLServer中的“BEFORE”觸發(fā)器);以及3)后保存(例如,該事件正好在將改變保存到存儲之后引發(fā),且可以在意向和行為上實質(zhì)上類似于SQLServer中的AFTER觸發(fā)器)。這種類型的BL在CDP中運行,由此可以在其上部署CDP的任一層上運行。因此,當它在客戶機層上運行時,它可以被其他應(yīng)用程序繞過(例如,它不在信任邊界內(nèi)運行)。
此外,業(yè)務(wù)邏輯主機416可以調(diào)用靜態(tài)/實例方法。為CDM類型自動生成的類是局部類。類型設(shè)計者可以通過對它們添加附加的方法來完成這些局部類,一般用于實現(xiàn)對一個或一組特定類型有意義的邏輯??紤]以下例子person.GetOnlineStatus(),其中person(個人)是Person類型實例;emailAddr.Is ValidAddress(),其中emailAddr(電子郵件地址)是SMTPEmailAddress(SMTP電子郵件地址)類型的實例;等。由于其真正的特性,這種類型的BL是不可強制實施的;例如,要靠應(yīng)用程序調(diào)用IsValidAddress()來確保有效性。它運行在其上部署CDP的任一層上。因此,當CDP在客戶機層上時,它不在信任邊界內(nèi)運行。
可綁定行為是允許類型設(shè)計者為第三方擴展創(chuàng)建插入點的代碼編寫模式。經(jīng)典示例是用于電子郵件消息的類型。不同的電子郵件程序可以在給定的機器上運行。每個程序希望使用公用消息類型,但是每個程序也需要定制SendMessage(發(fā)送消息)方法的行為。類型設(shè)計者通過定義SendMessage方法的基本行為,并允許第三方提供指向?qū)崿F(xiàn)的指針來完成這一過程。可綁定行為也可以在其上部署CDP的任一層上運行。因此,當CDP在客戶機層上時,它不在信任邊界內(nèi)運行。
靜態(tài)服務(wù)方法是在中間層上編寫和部署的BL,且對客戶機層而言是遠程的。換言之,BL作為中間層上的web服務(wù)運行。例如,考慮提供諸如CreateAppointment()、GetFreeBusy()等的日歷管理服務(wù)。這些服務(wù)(“靜態(tài)服務(wù)方法”)是使用CDP來實現(xiàn)的,且web服務(wù)部署在中間層上??蛻魴C層具有應(yīng)用程序用于使用通道(以下討論)來調(diào)用這些服務(wù)的web服務(wù)代理。這種類型的BL可以在中間層上運行且在信任邊界之內(nèi)。
應(yīng)該理解,組件化的體系結(jié)構(gòu)使得CDP可能保持存儲邏輯在一定程度上不可知。諸如對象高速緩存、指針、會話、事務(wù)等CDP特征使用CDP級抽象。到底層存儲抽象的映射在O-R映射和持久層中發(fā)生。通過重寫映射邏輯,CDP可以在不同的存儲中實現(xiàn)。
圖5示出了CDP的各種組件中的數(shù)據(jù)流。使用以下示例檢查各種組件之間響應(yīng)于應(yīng)用程序500(類似于應(yīng)用程序206和應(yīng)用程序400)的方法調(diào)用的交互是啟發(fā)性的。
<pre listing-type="program-listing"><![CDATA[1.void AddToCart(String customerId,String productId)2.{3. using(OrderData od=new OrderData())4. {5.ShoppingCart cart=od.ShoppingCarts.Searcher.Filter(6. "CustomerId={0}",customerId).GetFirst();7.if(cart==null)8. throw new Exception(“No shopping cart”);9.Product product=od.Products.Searcher.Filter(10. "ProductId={0}",productId).GetFirst();11. if(product==null)throw new Exception(“Missing product);12. cart.Products.Add(product);13. od.SaveChanges();14. }15. }]]></pre>該例子對持久ShoppingCart(購物車)添加了一個項。舉例而言,設(shè)想該方法是作為處理ASP.NET網(wǎng)頁的一部分來調(diào)用的。
第3行創(chuàng)建存儲上下文。StorageContext是由應(yīng)用程序500創(chuàng)建的OrderData(訂單數(shù)據(jù))對象來封裝的。OrderData類可以表示在CDM模式中描述的表集類型。OrderData對象創(chuàng)建被配置為與存儲202交互所必需的StorageContext對象。StorageContext的初始化代碼可以是打開到存儲202的連接的運行時會話和事務(wù)組件404的一部分,并且完成發(fā)起會話和創(chuàng)建事務(wù)上下文所必需的工作。安全上下文在約束/安全組件112中建立。最后,StorageContext的實例由API 108返回給應(yīng)用程序500。在2層情況下,獲取StorageContext導(dǎo)致到存儲202的連接。應(yīng)該理解,在3層部署中的連接可以稍有不同。
第5行查詢。第5行中表達式的右側(cè)是OPath查詢。持久化和查詢引擎408展示對用于基于CDM查詢檢索對象的方法的基本接口。CDM 402中的CDM實現(xiàn)調(diào)用具有特定OPath的方法。持久化和查詢引擎408將查詢映射到SQL,并通過連線將其作為TDS有效負載發(fā)送。約束/安全組件112確保適當?shù)貞?yīng)用了安全性且應(yīng)用程序/用戶只看到它們被允許看到的數(shù)據(jù)。存儲執(zhí)行查詢并將結(jié)果返回到CDP運行庫110。CDM 402和持久化/查詢引擎408協(xié)同工作,以混合來自TDS結(jié)果的對象,且這些對象被置于對象高速緩存414(例如會話高速緩存)中。結(jié)果是API108將ShoppingCart對象返回給應(yīng)用程序500。
第9行查詢。既不是這個查詢也不是先前導(dǎo)致創(chuàng)建任何指針的那個查詢(GetFirst()方法本質(zhì)上應(yīng)用于查詢的“第1個”子句)。然而,如果查詢要求創(chuàng)建指針,那么指針/規(guī)則組件410執(zhí)行這個操作。
第12行更新對象高速緩存414中的ShoppingCart對象在指定的Product(產(chǎn)品)中更新。
第13行刷新改變。在OrderDate對象上的SaveChanges()的實現(xiàn)調(diào)用經(jīng)封裝的StorageContext對象上的SaveChanges()。StorageContext.SaveChanges()是業(yè)務(wù)邏輯主機組件416的部分。這涉及以下步驟。首先,運行預(yù)保存邏輯。接著,運行確認代碼,之后是后保存過程。確認代碼被掛鉤到由CDP API 108定義的事件。注意,在另一實現(xiàn)中,確認代碼可以被掛鉤到對象的設(shè)置器。接著,運行預(yù)保存代碼。該代碼被掛鉤到由CDP API 108定義的事件。將改變寫入到存儲中。首先,主機組件416與對象高速緩存414協(xié)同工作以便獲取改變向量,該改變向量含有在該存儲上下文中作出的所有改變。持久化引擎408展示被稱為IPersist(持久化)的接口,它是諸如Write(&lt;改變向量&gt;)等方法的基本接口。主機組件416從持久化引擎408獲取IPersist并用改變向量來調(diào)用Ipersist.Write()。持久化引擎408將寫請求映射到適當?shù)腟QL更新(實際的UPDATE語句或存儲過程調(diào)用)中,并使用該更新將改變寫入到存儲202中。在這個過程中,約束/安全性組件112確保完成了適當?shù)陌踩珡娭茖嵤?。它也運行任何約束邏輯。最后,運行后保存代碼。該代碼被掛鉤到由CDP API 108定義的事件。
注意,業(yè)務(wù)邏輯的運行會導(dǎo)致對高速緩存414中對象的改變。這些改變通過對myStorageContext.SaveChange()的調(diào)用來持久保存在存儲202中,以確保不會繞過業(yè)務(wù)邏輯416。多個ISV(獨立支持銷售商)可能希望對數(shù)據(jù)改變運行邏輯,在這種情況下他們將其處理程序掛鉤到事件和由CLR以FIFO(先進先出)順序調(diào)用的處理程序。在這個示例中,業(yè)務(wù)邏輯416主存ISV驗證、預(yù)保存和后保存邏輯。
圖6示出了可以用CDP實現(xiàn)的各種框架。CDP是被設(shè)計成可跨各中指定的垂直域(諸如用戶數(shù)據(jù)、LOB數(shù)據(jù)等)使用的數(shù)據(jù)平臺。CDM提供了域不可知數(shù)據(jù)模型,它足夠豐富來表達域?qū)S媒Y(jié)構(gòu)和語義,但同時足夠普通以便跨不同的域使用。各種CDP特征是基于CDM的,且跨所有域的應(yīng)用程序可用。
對照CDP編寫的所有應(yīng)用程序的總體可以被分成以下三類1.框架框架使用由CDP提供的可擴展機制以便為特定的域定制CDP。
框架將值以及類型規(guī)范和附加服務(wù)添加到CDP。然而,展示給應(yīng)用程序的編程模型是CDP編程模型;特別地,應(yīng)用程序仍然使用數(shù)據(jù)類、StroageContext、StorageSearcher以及CQL?;跀?shù)據(jù)庫的文件存儲系統(tǒng)可以是CDP之上的框架的一個示例,它是為用戶數(shù)據(jù)域定制的。
2.垂直平臺CDP之上的單獨的層,具有其自己的API、抽象和數(shù)據(jù)模型。它隱藏了CDP,并將整個不同的編程模型展示給應(yīng)用程序。例如,與電子郵件結(jié)合使用的應(yīng)用程序可以使用CDP,但是為其用戶展示電子郵件對象模型。
3.“常規(guī)”應(yīng)用程序僅僅是旨在完成一組特定任務(wù)的CDP應(yīng)用程序。
它不專用于任何CDP類型,或展示編程模型,或使用任何框架或垂直平臺。
垂直平臺和“常規(guī)”應(yīng)用程序只是代碼;它們可以用任何方式使用CDP,而不帶有喜好或偏見。框架有一些不同;由于它們將值添加到CDP而不將它向應(yīng)用程序隱藏,它們可以遵守以下規(guī)則1.框架數(shù)據(jù)模型等同于CDM,或者是簡單的、很好地證明的CDM規(guī)范。它可以定義新的類型,但是這些類型是以實體作為最終的超類。
2.框架會對現(xiàn)有CDM類型定義附加約束和/或使用CSDL來創(chuàng)作新的約束。換言之,對于約束定義必須使用CDM方法來表達約束。
3.框架通常不展示它們自己的查詢語言;即使它們這么做,也是作為對CQL的附加,而不是代替CQL。
4.框架通常不展示它們自己的編程模型;即使它們這么做,也是作為CDP API的附加,而不是代替CDP API。
5.框架在CDP之上提供附加的專用服務(wù)。這些服務(wù)可以被實現(xiàn)為CDP業(yè)務(wù)邏輯或附加的助手類和方法。
應(yīng)該理解,所有上述規(guī)則旨在確保由特定框架保存到CDP中的數(shù)據(jù)對所有應(yīng)用程序可訪問,而不管應(yīng)用程序是否使用該框架。
圖6示出了在CDP層602之上的三個(3)框架用戶應(yīng)用程序框架(UAF)604(例如,基于數(shù)據(jù)庫的文件存儲系統(tǒng)、WinFS等)、協(xié)作框架608(諸如WSS)以及業(yè)務(wù)框架610(BF)(例如LOB框架)。屬于每種框架的數(shù)據(jù)以相同的模式示出為框架塊。例如UAF 604具有數(shù)據(jù)聯(lián)系人618和項620;協(xié)作框架608具有數(shù)據(jù)文檔庫622;而BF 610具有數(shù)據(jù)訂單624。注意,所有這些類型最終是以實體626作為超類的。
圖6也示出了應(yīng)用層中的三個(3)應(yīng)用程序聯(lián)系人管理應(yīng)用程序612、協(xié)作應(yīng)用程序614(諸如電子郵件應(yīng)用程序)以及顧客關(guān)系管理(CRM)應(yīng)用程序616。聯(lián)系人管理應(yīng)用程序612完全用來自UAF 604的數(shù)據(jù)工作;CRM應(yīng)用程序616用來自UAF 614和BF 610兩者的數(shù)據(jù)工作;而協(xié)作應(yīng)用程序614用來自所有三個框架(如,UAF 604、協(xié)作框架608和BF 610)的數(shù)據(jù)工作。
圖7示出了允許多個應(yīng)用程序共享數(shù)據(jù)的公用的、基于數(shù)據(jù)庫文件存儲系統(tǒng)環(huán)境。換言之,圖7示出了多個應(yīng)用程序使用單個框架。CDP組件和存儲組件702(在圖7中示為CDP+存儲)可以用作操作系統(tǒng)的單個數(shù)據(jù)平臺,它可以由任何和所有應(yīng)用程序充分利用。優(yōu)點(如上所述)是豐富建模、數(shù)據(jù)透明度以及數(shù)據(jù)共享。這些優(yōu)點將在下文中作出更詳細的描述。
CDM提供了可用于描述一組完全不同的應(yīng)用程序和情形所需類型的靈活的建模環(huán)境。例如,用戶數(shù)據(jù)(例如文檔、文件、照片、音樂...)、LOB數(shù)據(jù)(例如顧客、訂單、訂單細節(jié)...)、PIM數(shù)據(jù)(例如聯(lián)系人、電子郵件、日歷、任務(wù)...)都可以使用CDM來建模??缭浇Y(jié)構(gòu)化、半結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)且也跨越垂直域的這種類型的豐富建模使得單個應(yīng)用程序可能使用公用抽象和查詢語言用不同類型的數(shù)據(jù)來工作。換言之,CDP可以用作一個存儲。
CDP可用作所有應(yīng)用程序都能充分利用的單個數(shù)據(jù)平臺。此外,使用CDP存儲的數(shù)據(jù)可被所有的應(yīng)用程序用于操作(例如,服從安全策略)??紤]以下情況每個應(yīng)用程序以對除了其本身(例如,存儲了數(shù)據(jù)的應(yīng)用程序)以外的其他應(yīng)用程序都不透明的格式來存儲數(shù)據(jù)。給出兩個示例電子郵件收件箱的內(nèi)容對除了電子郵件應(yīng)用程序外的所有其他應(yīng)用程序都是不透明的;CRM應(yīng)用程序有一組詳細的模式,它覆蓋在創(chuàng)建諸如顧客、案例等的抽象的表之上——因此使“顧客”的概念對所有其他應(yīng)用程序是不透明的(例如,除非應(yīng)用程序知道CRM應(yīng)用程序使用的模式)。
顯然,在電子郵件應(yīng)用程序中有概念上與CRM應(yīng)用程序存儲的數(shù)據(jù)相似的數(shù)據(jù)——一個示例是聯(lián)系人信息。據(jù)用戶所關(guān)注的,聯(lián)系人是Contact;從這個觀點出發(fā),很難理解為何相同的聯(lián)系人信息被存儲兩次,一次在CRM中,一次在電子郵件收件箱中。這里的問題不只是多余的存儲,而是所有暗示的不規(guī)則——使得更新發(fā)生在兩個地點,協(xié)調(diào)刪除和確保插入發(fā)生在兩個地點等等??紤]當電子郵件應(yīng)用程序和CRM應(yīng)用程序都被構(gòu)建在CDP存儲702上時將發(fā)生什么情況。使用CDM,聯(lián)系人類型可從實體類型導(dǎo)出,并且其結(jié)構(gòu)對電子郵件應(yīng)用程序和CRM應(yīng)用程序變?yōu)橥该鞯?。因此,只要兩個應(yīng)用程序在類型的模式上達成一致,則完全不同的應(yīng)用程序可使用彼此的數(shù)據(jù)而不需要知道彼此的存在。由于CDP提供一個公用查詢模型,因此(例如)CRM應(yīng)用程序可查詢聯(lián)系人數(shù)據(jù),而忽略聯(lián)系人的一個特定實例是否“屬于”它。
豐富建模的組合,數(shù)據(jù)透明度和平臺框架體系結(jié)構(gòu)允許涉及多個應(yīng)用程序和框架的組合的許多共享/互用的情形。應(yīng)該理解,術(shù)語共享可以指只要數(shù)據(jù)存儲在CDP中,就能夠不考慮數(shù)據(jù)存儲在哪個應(yīng)用程序中和/或使用哪種框架來存儲數(shù)據(jù)而使用數(shù)據(jù)的應(yīng)用程序。
特別地,圖7示出了一個常見的UAF情形,其中多個應(yīng)用程序共享數(shù)據(jù),在這種情況下,數(shù)據(jù)是從項706中導(dǎo)出的一組UAF類型。CDP和存儲792可包括與UAF框架704有關(guān)的一組UAF類型。該組UAF類型可從項706導(dǎo)出,其中該組可包括電子郵件708、文檔710以及聯(lián)系人712。還應(yīng)該理解,項706可從實體714導(dǎo)出。多個應(yīng)用程序可與CDP和UAF框架704結(jié)合使用,諸如但不限于,電子郵件應(yīng)用程序716、豐富回避(evite)客戶機以及項目M 720。應(yīng)該理解,對應(yīng)用程序、CDP、UAF所駐留的層沒有約束。例如,圖7的應(yīng)用程序中的一個可在中間層執(zhí)行和/或運行(例如,協(xié)作應(yīng)用程序)。
圖8示出了根據(jù)CDP和相關(guān)聯(lián)體系結(jié)構(gòu)使用多個框架的單個應(yīng)用程序。CDP和存儲702可向操作系統(tǒng)提供所有應(yīng)用程序充分利用的數(shù)據(jù)平臺。主要在LOB框架804之上編寫的CRM應(yīng)用程序802可使用與UAF框架808相關(guān)聯(lián)的聯(lián)系人數(shù)據(jù)806。應(yīng)該理解,CRM應(yīng)用程序802通常使用與其相關(guān)聯(lián)的數(shù)據(jù),諸如但不限于,訂單細節(jié)814和購買訂單816。CRM應(yīng)用程序802在使用UAF數(shù)據(jù)(例如,聯(lián)系人數(shù)據(jù)806、項810、實體812等)時可使用CDP級抽象。換言之,CRM應(yīng)用程序802不需要使用UAF框架808方法。此外,應(yīng)該理解和明白,CRM應(yīng)用程序802可以駐留在一層上。
圖9示出了CDP與關(guān)聯(lián)于多個完全不同的框架的多個應(yīng)用程序共享數(shù)據(jù)。圖9描述了三個框架,UAF框架904、協(xié)作框架908和在CDP 902之上的BF框架910。多個應(yīng)用程序可使用框架級和CDP級編程的組合。特別地,聯(lián)系人管理應(yīng)用程序912、協(xié)作應(yīng)用程序914和CRM應(yīng)用程序916可使用框架級和CDP級編程的組合。CDP 902提供與多個完全不同的框架相關(guān)聯(lián)的應(yīng)用程序以共享存儲928中的數(shù)據(jù)。
特別地,存在多個應(yīng)用程序與數(shù)據(jù)交互的各種方式。聯(lián)系人管理應(yīng)用程序912可使用CQL來查詢聯(lián)系人918;它可以使用UAF 904方法,諸如項級移動、復(fù)制、contact.GetBestEAddress()等。聯(lián)系人管理應(yīng)用程序912還可使用核心CDP運行庫類,諸如但不限于,StorageContext、StorageSearcher,以及CDP數(shù)據(jù)類(例如,聯(lián)系人類和相關(guān)聯(lián)的獲取器和設(shè)置器)。
協(xié)作應(yīng)用程序914可使用CQL來查詢聯(lián)系人918、文檔庫922中的任何文檔、甚至可能查詢訂單924。協(xié)作應(yīng)用程序914不需要知道UAF 904和/或BF 910的存在來完成這樣的查詢——它可以完全在CDP級完成,而不需要使用由其他框架編寫的任何特殊代碼。它使用協(xié)作框架908的操作細節(jié)來操縱文檔庫922,諸如AddDocumentToDocLib(&lt;文檔&gt;,&lt;文檔庫&gt;)等。協(xié)作應(yīng)用程序914還可使用CDP級類,諸如StorageContext、StorageSearcher(存儲搜索器)、Contact、Order、DocLibrary(文檔庫)和相關(guān)聯(lián)設(shè)置器和獲取器。
CRM應(yīng)用程序916使用CQL來按照給定的聯(lián)系人查詢所有的訂單。應(yīng)該理解,CRM應(yīng)用程序916可以在不知道實際使用UAF 904創(chuàng)建的聯(lián)系人的情況下進行這個查詢。它使用BF 910提供的方法和服務(wù)(例如,F(xiàn)indShipStatus(&lt;訂單&gt;))來操縱訂單。它還可使用CDP級類,諸如StorageContext、StorageSearcher、Contact、Order和相關(guān)聯(lián)的設(shè)置器和獲取器。
當共享非CDP存儲時,重要的是注意,CDP不使用供應(yīng)者模型,由此任意數(shù)據(jù)源可表現(xiàn)為CDP存儲。當CDP/框架應(yīng)用程序想要用非CDP存儲中的數(shù)據(jù)來工作時,它可以使用兩個選項1)使用同步適配器體系結(jié)構(gòu)(UAF的一部分)以將該數(shù)據(jù)同步到CDP存儲中;2)構(gòu)建自定義邏輯以與非CDP存儲集成。
圖10示出了CDP的一種雙層部署。構(gòu)成CDP的各種組件在某種意義上是移動的。采用某個限制,它們可跨不同進程和機器邊界部署,結(jié)果是2層、3層和N層(這里N是一個大于或等于1的整數(shù))配置。應(yīng)該理解和明白,雖然示出了2層部署,但是本發(fā)明并不如此局限,并且可采用任意層數(shù)的配置。
特別地,CDP API 1002和CDP運行庫1004可以都在與應(yīng)用程序1006相關(guān)的應(yīng)用程序進程之中。因此,CDP組件(例如,CDP運行庫1004、API 1002和約束/安全性1008)可存在于各個層中。例如,API 1002、CDP運行庫1004和應(yīng)用程序1006可存在于客戶機層1010中,其中的組件可存在于其自己的進程/機器邊界中。另外,存儲1012和約束/安全性1008可存在于服務(wù)器層1014中,其中的組件可存在于其各自的進程/機器邊界中。應(yīng)該理解,約束/安全性1008可被主存在存儲進程中,而剩下的CDP組件可在客戶機進程中。這是為何CDP組件被認為是可移動的一個主要示例。
圖11示出了根據(jù)本發(fā)明的一方面具有共享數(shù)據(jù)的一種雙層部署。下文討論的第一配置是當多個應(yīng)用程序共享同一數(shù)據(jù)的時候。這不是說應(yīng)用程序必須共享這些數(shù)據(jù);而是說任何應(yīng)用程序的數(shù)據(jù)對其他應(yīng)用程序都是可用的。同時注意,數(shù)據(jù)的可用性是在應(yīng)用程序的上下文中而不是用戶上下文中的,因此這和用戶憑證的概念是截然不同的。CDP運行庫的約束/安全性模塊不需要借助應(yīng)用程序就可以處理。
應(yīng)用程序與API和CDP運行庫可以交互,其中各種應(yīng)用程序可分別與各自的組件一起存在,因此每一應(yīng)用程序、API和CDP運行庫可以有它們自己的機器/進程邊界,被示為邊界1102、邊界1104和邊界1006。簡化起見,示出了三個應(yīng)用程序(例如,應(yīng)用程序1、應(yīng)用程序2和應(yīng)用程序3),然而應(yīng)該理解,可以采用任意數(shù)目的應(yīng)用程序。應(yīng)用程序可在其自己進程/機器邊界1112中訪問存儲1110中的共享數(shù)據(jù)1108。應(yīng)該理解,在完全不同的應(yīng)用程序之間共享數(shù)據(jù)時,強制實施了約束/安全性1114。
該配置在很多用戶情形中是很重要的;例如,在基于數(shù)據(jù)庫的文件存儲構(gòu)想中這是模式化數(shù)據(jù)的基礎(chǔ),這些數(shù)據(jù)可被ISV充分利用來構(gòu)建智能的、知曉數(shù)據(jù)的應(yīng)用程序。項目M可依賴于該配置來實現(xiàn)其成為所有用戶數(shù)據(jù)通用畫布的構(gòu)想。這是CDP支持的主要配置。
圖12圖示了第二配置,使得應(yīng)用程序具有不希望被其他應(yīng)用程序看到和/或使用的專用數(shù)據(jù)。換言之,存在涉及專用數(shù)據(jù)的雙層部署。存在很多需要應(yīng)用程序?qū)S脭?shù)據(jù)的用戶和ISV情形。例如,如果應(yīng)用程序決定在基于數(shù)據(jù)庫的文件存儲系統(tǒng)中存儲其配置數(shù)據(jù)(例如,ini文件等效物),那么這個過程對應(yīng)用程序最好是專用的。很多時候需要局部專用性——可讀但不可寫。例如,在電子郵件應(yīng)用程序中,最好只顯示收件箱但自身保留修改收件箱的權(quán)限。
在雙層部署中,CDP對此配置有受限的支持。在SQL服務(wù)器存儲中沒有對應(yīng)用程序級安全性的合理支持;因此,在防止數(shù)據(jù)訪問的嚴格意義上,一個數(shù)據(jù)片段可能對于給定的應(yīng)用程序不被標記為專用。然而,這種狀況可通過以下方式來部分地支持·應(yīng)用程序使用其自己的類型,然后將其類型放入一個獨立的名字空間中,并為從這些類型中得到的數(shù)據(jù)類創(chuàng)建專用程序集。由于對屬于該模式的所有CDP級訪問是通過這些程序集來進行的,所以其他應(yīng)用程序?qū)⒉痪哂袑ο鄳?yīng)類的訪問。
·應(yīng)用程序創(chuàng)建其自己的專用CDP存儲(例如,可在其上創(chuàng)建StorageContext的CDP中的一組實體),其名字不對其他應(yīng)用程序公開。
·通過使用文檔。
應(yīng)該理解,應(yīng)用程序可選擇一些或者全部上述方法來獲得專用數(shù)據(jù)。
應(yīng)該注意,CDP體系結(jié)構(gòu)本身對于實現(xiàn)專用數(shù)據(jù)的真實概念不形成阻礙。因此,當應(yīng)用程序級安全性在底層平臺中變?yōu)榭捎脮r,CDP可容易地展示它是可能的。同時注意,在很多情況下,“專用數(shù)據(jù)需求”的出現(xiàn)不是由于限制可見性的真實需求,而是由于在數(shù)據(jù)上強制實施應(yīng)用程序?qū)S脴I(yè)務(wù)邏輯的需求。例如,由電子郵件應(yīng)用程序創(chuàng)建的本地收件箱有日歷文件夾;規(guī)則是只有日歷項可放置在這個文件夾中。只要強制實施這個規(guī)則,電子郵件應(yīng)用程序就不關(guān)心另一個應(yīng)用程序(諸如一個完全不同品牌的電子郵件應(yīng)用程序)是否可以查看/修改其收件箱。只要所有應(yīng)用程序都經(jīng)歷CDP層,CDP體系結(jié)構(gòu)就提供對所有業(yè)務(wù)邏輯的強制實施。應(yīng)該理解,由于中間層可以強制實施這一規(guī)則,專用應(yīng)用程序數(shù)據(jù)在三層部署中得到支持。
繼續(xù)圖12,示出了與API和CDP運行庫交互的應(yīng)用程序的機器/進程邊界1202,以及與API和CDP運行庫交互的應(yīng)用程序的機器/進程邊界1204。簡化起見,只示出了兩個應(yīng)用程序,但應(yīng)該理解,任意數(shù)目的應(yīng)用程序在其自己的機器/進程邊界1208內(nèi)可訪問共享數(shù)據(jù)1210和/或訪問存儲1206中各自的專用數(shù)據(jù)(例如,應(yīng)用程序1訪問專用數(shù)據(jù)1210;應(yīng)用程序2訪問專用數(shù)據(jù)1212)。
圖13示出了使得另一個應(yīng)用程序可直接訪問存儲的所感興趣的第三配置。換言之,存在具有直接存儲訪問的雙層部署。在機器/進程邊界1320內(nèi)的應(yīng)用程序2例如可能通過ADO.NET或其他數(shù)據(jù)訪問API可直接訪問SQL存儲1306。例如,具有現(xiàn)有SQL應(yīng)用程序的大型IT(信息技術(shù))商店不可能消除它,并一起移動到基于CDP的應(yīng)用程序。相反,可實現(xiàn)在分段基礎(chǔ)上向CDP的遷移。由于零停機時間和穩(wěn)定性在生產(chǎn)環(huán)境中是關(guān)鍵問題,所以很可能CDP應(yīng)用程序可繼續(xù)與SQL應(yīng)用程序并行運行一段時間。由于CDP提供靈活的、非命令性O(shè)-R(對象-關(guān)系)映射,因此CDP應(yīng)用程序可在現(xiàn)有模式上部署。自然地,CDP體系結(jié)構(gòu)允許直接SQL訪問。這是由于‘應(yīng)用程序1數(shù)據(jù)’就是一組表,并且只要應(yīng)用程序2有適當?shù)脑S可,就不能阻止它的直接訪問。
注意以下有關(guān)應(yīng)用程序2的結(jié)論1)它可能無法訪問CDP服務(wù)(或者由CDP之上的框架構(gòu)建的任何服務(wù))。
2)特別地,它不具有CDM的好處——所以它必須算出表式表示,并在該級直接發(fā)布查詢/更新。
注意以下有關(guān)應(yīng)用程序1的結(jié)論1)BL服務(wù)中的業(yè)務(wù)邏輯被應(yīng)用程序2有效地繞過。
2)某些約束——例如那些沒有被實現(xiàn)為觸發(fā)器/DRI(聲明性引用完整性)的約束也被應(yīng)用程序2繞過。
在這個特定的部署中,應(yīng)用程序設(shè)計員和/或部署管理員有責任確保應(yīng)用程序2使其本身邏輯強制實施約束等,從而使得正確的事情發(fā)生。
圖14和圖15示出了CDP組件的三層部署配置。各種CDP組件可被部署在三層配置中。在此配置中,CDP運行庫1402同時存在于客戶機層和中間層(如圖15所示)。應(yīng)用程序位于客戶機層,而存儲1404位于服務(wù)器層(如圖15所示)。應(yīng)用程序邏輯與圖14和15中的兩個要求者有關(guān)第一個是客戶機1406。第二個是web服務(wù)代理1408、web服務(wù)1410(見圖15)和業(yè)務(wù)邏輯主機1412(見圖15)(例如,確認、預(yù)保存邏輯和后保存邏輯)。盡管客戶機1406是應(yīng)用程序,并且因此其中包含的邏輯可被合法地稱為“應(yīng)用程序邏輯”,但這不是所要參考的。而是參考包含在web服務(wù)代理1408、web服務(wù)1410和業(yè)務(wù)邏輯主機1412中的邏輯。這是由ISV編寫的代碼并且將被部署在中間層;因此,事實上這是中間層應(yīng)用程序。應(yīng)用程序邏輯可同時駐留在客戶機層和中間層。取決于應(yīng)用程序邏輯運行的地點,下面考慮了多個可能的情形。
在開始考慮各種情形之前,應(yīng)該理解多層部署的主題與跨層遙控應(yīng)用程序動作的方式密切相關(guān)。術(shù)語遙控可包含以下三個通用的方法來跨層遙控應(yīng)用程序級或CDP服務(wù)級操作。
1)通過web服務(wù)的應(yīng)用程序級遙控在這個情況中,應(yīng)用程序邏輯駐留在中間層,且作為遙控的靜態(tài)方法展示給客戶機。這將在下文中詳細討論。
2)隱式CDP服務(wù)調(diào)用遙控諸如FindAll()、FindOne()、SaveChanges()等CDPAPI調(diào)用通過遙控代理和遙控服務(wù)組件被隱式地發(fā)送給中間層。該體系結(jié)構(gòu)在下文中描述。而且,隨后的章節(jié)中有描述其如何工作的示例。
3)顯式的、斷開的遙控CDP API定義一種編程模式,由此應(yīng)用程序顯式地定義何時應(yīng)該發(fā)生跨層操作。如果這個操作導(dǎo)致數(shù)據(jù)檢索,那么檢索的數(shù)據(jù)被高速緩存在客戶機層。這個模式經(jīng)常被稱為“斷開模式”(下文討論)。
特別地,圖14和圖15示出了運行在中間層(例如,web服務(wù))的應(yīng)用程序邏輯。中間層部署的主要情形是當應(yīng)用程序邏輯在中間層顯式地運行的情況;客戶機1406通過web服務(wù)機制(例如,web服務(wù)代理1408和web服務(wù)1410)調(diào)用此邏輯。應(yīng)該理解,服務(wù)器層的安全引擎可被主存在中間層CDP進程中。在一2層部署中,CDP調(diào)用由客戶機進程中的CDP運行庫1402處理;運行庫在必要的時候聯(lián)系服務(wù)器。在3層部署中,某些CDP調(diào)用是在本地(通過客戶機層)處理的,某些則遠程(通過中間層)處理。此外,還有一些在兩個地方都可以處理。3層部署定義了用于遙控適當?shù)恼{(diào)用的方法。
在客戶機層上的遙控代理1414是可以使用通道(例如,Indigo)來打包和發(fā)送請求給中間層的CDP的組件(這是遠程過程調(diào)用的實際動作)。在中間層存在一基本足夠服務(wù)這些請求的遙控服務(wù)1416(見圖15)。此模式是通常所稱的面向服務(wù)的體系結(jié)構(gòu)(SOA)的一部分。SOA的一個特征是不同的層通過交換消息來相互通信。為此CDP可使用Indigo基礎(chǔ)結(jié)構(gòu)。
遙控服務(wù)提供一組面向數(shù)據(jù)的服務(wù)-諸如“執(zhí)行查詢”、“插入”、“刪除”、“更新”、“創(chuàng)建”、“保存”、“給出關(guān)鍵字獲取對象”、“獲取根關(guān)鍵字”。與SOA范例一致,這些操作可以是SOAP消息內(nèi)的動詞??蛻魴C層希望在中間層執(zhí)行的任何動作都按照這些簡單動詞來表達。這些基本消息通信動詞被抽象為使用Indigo所提供工具的2個接口上的方法;事實上,這是上文討論過的Ipersist和IQuery接口。因此,遙控代理1414和遙控服務(wù)1416一起用作Indigo通道的斷點來遙控IPersist和IQuery接口的方法。應(yīng)該理解,IPersist和IQuery接口中的方法在以下意義上是“粗粒度的”它們可用于查詢或操作一大組對象。例如響應(yīng)于SaveChanges()方法,遙控代理1414用整個一組改動對象向遙控服務(wù)1416發(fā)布一次IPersist.Write()。因此,在客戶機和中間層之間的接口是面向批量的而非繁復(fù)的。
響應(yīng)于方法調(diào)用,可描述以下偽代碼示例以檢查圖14和圖15所示的跨各種模塊的數(shù)據(jù)/控制流。應(yīng)該理解和明白,以下內(nèi)容是一示例,本發(fā)明的體系結(jié)構(gòu)不限于此。
<pre listing-type="program-listing"><![CDATA[1.WinFSData wd= new WinFSData(@"\\CorpSvr01\SharedSchedule\AnilNori"))2.ScheduleEntry s=wd.Items.FilterByType<ScheduleEntry>().Filter("StartTime>@0",new DateTime(xxxx,10,29,9,0,0)).GetFirst();3.s.DisplayName=s.DisplayName+"[important,please come!]";4.ScheduleService ss=new ScheduleService(wd);/*public bool CreateAppointment(ScheduleEntry appointment, * string path)*/5.if(ss.CreateAppointment(s,@"\\CorpSvr01\SharedSchedule\PCelis"))6.{7.Console.WriteLine("Appointment created!");8.}]]></pre>在此示例中,應(yīng)用程序查詢在公司內(nèi)聯(lián)網(wǎng)上Anil Nori的共享日歷以獲得他的10月29日的日歷條目-xxxx于上午9點。這部分地是由ScheduleEntry(日程表條目)對象來表示的,它是從實體導(dǎo)出的類型(例如,ScheduleEntry是PIM模式的一部分,并且描述了用戶日程表中的項目)。它修改ScheduleEntry——將文本“[important,please come!]”追加到約會的標題。它然后調(diào)用web服務(wù)(稱為ScheduleService(日程表服務(wù)))上的CreateAppointment(創(chuàng)建約會)方法,以將此修改的ScheduleEntry放到Pedro Celis的共享日歷中。此代碼片斷示出了3層部署中的幾個要點1)1.客戶機使用本地CDP運行庫來查詢存儲實體。查詢在中間層執(zhí)行。
2)查詢結(jié)果在客戶機層CDP的會話高速緩存中。
整個“應(yīng)用程序邏輯”——包括業(yè)務(wù)邏輯、確認等——在中間層由web服務(wù)和CDP的BL主機引擎運行。此處理過程由對CreateAppointment()方式的調(diào)用觸發(fā)。以下內(nèi)容是對各種模塊之間/跨各種模塊的數(shù)據(jù)流的詳細檢查。
第1行創(chuàng)建存儲上下文。StorageContext對象(客戶機層上的API 1418)被應(yīng)用程序和/或客戶機1406創(chuàng)建的Data(數(shù)據(jù))對象封裝。Data類表示在CDM模式中描述的表集類型。Data對象創(chuàng)建如與存儲1404交互所需地配置的StorageContext對象。。StorageContext的初始化代碼是客戶機層上CDP運行庫的一部分。
第2行查詢。第2行中的表達式的RHS是OPath查詢。此查詢返回最多一個ScheduleEntry對象——在10/29/04上午9點的第一個條目(例如,假設(shè)存在“第一個條目”的精確定義)??蛻魴C層上的CDP運行庫1402獲得遙控代理1414上的IQuery接口并在其上調(diào)用ExecuteQuery(&lt;路徑&gt;)。遙控代理1414可使用Indigo通道,并向中間層上的遙控服務(wù)1416發(fā)送此查詢。此查詢?nèi)缤陔p層情況下那樣映射和執(zhí)行,并且結(jié)果被返回給客戶機層。這里有兩種可能性1)原始TDS結(jié)果從中間層返回給客戶機層,而不混合對象??蛻魴C層上的CDP運行庫1402然后混合對象。
2)如果這些對象已經(jīng)存在于對象高速緩存414中,被混合的對象被返回給客戶機層。
應(yīng)該理解,整個OPath查詢穿過Indigo通道被發(fā)送。例如,如果查詢是“尋找類型為ScheduleEntry的所有對象對象”(即,F(xiàn)indAll()方法調(diào)用),那么此整個查詢可在一個SOAP消息中被發(fā)送給(中間層上的遙控服務(wù)1416),而不是每個對象一個信息。
第3行操縱客戶機層對象高速緩存。一旦ScheduleEntry對象被返回給客戶機層,它就可在客戶機層上的CDP運行庫的會話高速緩存內(nèi)用于進一步的操縱。當客戶機1406改變ScheduleEntry對象的DisplayName(顯示名稱)屬性時,這將完全由客戶機層上的CDP運行庫來處理。
第4行更新客戶機層上的web服務(wù)代理。假定客戶機1406已經(jīng)在設(shè)計時添加了對適當asmx(或者Indigo等價物)的引用。第4行可創(chuàng)建客戶機上的web服務(wù)代理對象的實例。此調(diào)用完全由web服務(wù)代理1408來服務(wù)。
第5行調(diào)用web服務(wù)方法。CreateAppointment()是由中間層上的web服務(wù)1410遙控的方法中的一個。此方法取ScheduleEntry對象和CDP連接串;它使用此信息在由連接串定義的StorageContext內(nèi)創(chuàng)建ScheduleEntry對象。此寫操作的內(nèi)部是適當業(yè)務(wù)邏輯和確認邏輯的運行。此方法由web服務(wù)代理1408打包并通過Indigo通道經(jīng)由SOAP消息發(fā)送給中間層上的web服務(wù)1410。web服務(wù)1410通過調(diào)用在中間層上的CDP API 1420來實現(xiàn)該方法,如同它是任何其他應(yīng)用程序一樣。關(guān)鍵是注意CreateAppointment()的全部邏輯是在中間層上運行的。
圖16和圖17示出了同時運行在客戶機層和中間層上的應(yīng)用程序邏輯的圖表。響應(yīng)于方法調(diào)用通過不同組件和層的數(shù)據(jù)/控制流可使用一個示例來更詳細描述。以下的示例與上述示例相似。
<pre listing-type="program-listing"><![CDATA[1.void AddToCart(String customerId,String productId)2.{3. using(OrderData od=new OrderData())4. {5. ShoppingCart cart=od.ShoppingCarts.Searcher.Filter(6. "CustomerId={0}",customerId).GetFirst();7. if(cart==null)8. throw new Exception(“No shopping cart”);9. Product product=od.Products.Searcher.Filter(10. "ProductId={0}",productId).GetFirst();11. if(product==null)throw new Exception(“Missing product);12. cart.Products.Add(product);13. od.SaveChanges();14. }15.}16.]]></pre>在上面的示例中可以看到,第3行創(chuàng)建存儲上下文,第5行和第9行與查詢有關(guān),第12行與更新有關(guān)。
第13行刷新改變??紤]以下兩個可能性1)BL同時在客戶機層和中間層上運行在這種情況下,客戶機層上的業(yè)務(wù)邏輯主機416運行確認和預(yù)保存邏輯,并且使用IPersist.Write(&lt;改變向量&gt;)來調(diào)用客戶機層上的遙控代理1414。遙控代理1414向中間層上的遙控服務(wù)1416(見圖17)發(fā)送調(diào)用。遙控服務(wù)1416改動中間層上的對象高速緩存414并且調(diào)用SaveChanges()。這運行BL和前述的持續(xù)化步驟,并返回給遙控服務(wù)1416,遙控服務(wù)1416然后返回給客戶機層上的遙控代理1414,遙控代理1414進而又返回給業(yè)務(wù)邏輯主機416。客戶機端后保存邏輯可以不被業(yè)務(wù)邏輯主機416運行。
2)BL只運行在中間層上。在這種情況下,業(yè)務(wù)邏輯主機416立即向遙控代理1414發(fā)送調(diào)用,遙控代理1414進而將其發(fā)送給遙控服務(wù)1416。處理如上所述地在中間層發(fā)生。
同時在兩層上運行BL的一個優(yōu)點是當預(yù)保存邏輯確認出錯時,他們可在客戶機層被俘獲,而不需要付出連接到中間層的代價。
無縫離線體驗是基于數(shù)據(jù)庫的文件存儲系統(tǒng)的目標之一。這要求預(yù)遠程存儲同步數(shù)據(jù)的本地存儲1602。本地存儲1602還可包括約束/安全性1604。在這種情況下,本地存儲1602在充分相似的機器上,但在不同進程中(在我們的定義中仍然是2層部署)。由于3層和2層部署的編程模塊是對稱的,因此對于諸如同步等服務(wù)而言,在本地存儲1602和中間層之間操作以及保持數(shù)據(jù)同步就變得容易了。
考慮上文示出的代碼示例的第2行。查詢導(dǎo)致跨層操作。在這個特定的示例中,有一個返回的對象(ScheduleEntry對象)。然而,通常這可以潛在地返回非常大的結(jié)果集。類似的注釋應(yīng)用于前述代碼示例的第5行。有兩個可以考慮的且在三層部署中相關(guān)的問題·穿過層可能是昂貴的,因此可能不會隱式地發(fā)生在第2行中沒有明確地指示這將導(dǎo)致一個穿層操作——換言之,涉及“魔法”?!澳Хā痹谶@里使用意味著發(fā)生了一些應(yīng)用程序不知道或者沒有能力控制其發(fā)生的事情。很多時候,魔法是好的;事實上,這是很多軟件隱藏底層復(fù)雜性以及使事件“好像有魔法”一樣發(fā)生的目標。然而,在這個特定的情況中,長期的經(jīng)驗已經(jīng)示出應(yīng)用程序編寫者不管愿意不愿意都發(fā)送大量的查詢,假設(shè)底層的代碼以某種方式返回許多數(shù)據(jù),而不會堵塞網(wǎng)絡(luò)或向服務(wù)器增加壓力。它是一個已被證明的設(shè)計范例,可以使任何穿層魔法對應(yīng)用程序是顯式的,因此獎勵明智的編碼實踐(是“select*所需要的from&lt;上百萬行的表&gt;”或者可能使用WHERE子句)。
·客戶機端高速緩存和無邊界操作雖然嘗試明智的編碼,還是有需要應(yīng)用程序與(可能大量的)數(shù)據(jù)集合作的時候;經(jīng)常地,它知道此數(shù)據(jù)集是什么。為了在這樣的情況下優(yōu)化數(shù)據(jù)訪問,應(yīng)用程序應(yīng)有能力運行查詢、取出(可能大量的)數(shù)據(jù)并在高速緩存中本地存儲數(shù)據(jù)。對本地的數(shù)據(jù)副本進行進一步的查詢/排序/過慮/改變。最后刷新操作將那些改變寫回存儲。在本地高速緩存上工作意味著中間層維護及其最小(或沒有)的狀態(tài),因此使其變得更容易縮放。
該解決方案是提供一種顯式斷開模式。這是由以下模式表征的1.應(yīng)用程序通過以下方式例示本地高速高速緩存LocalContext lc=new LocalContext();
2.本地高速緩存將包含一個或多個查詢的結(jié)果,指定如下lc.QueryCollection.Add(“&lt;query1&gt;”);
lc.QueryCollection.Add(“&lt;query2&gt;”);
//等等3.應(yīng)用程序“填充”本地上下文lc.Fill();
4.它在本地上下文上工作,正如它對任何存儲上下文一樣。例如ScheduleEntry s=lc.Entities.FilterByType&lt;ScheduleEntry&gt;().Filter("StartTime&gt;@0",new DateTime(2004,10,29,9,0,0)).GetFirst();
s.DisplayName=s.DisplayName+"[important,please come!]";
5.最后,它向存儲發(fā)送所有改變,指定如下//sc是StorageContextlc.SaveChanges(sc);
注意,應(yīng)用程序是如何對它希望穿層操作發(fā)生變?yōu)轱@式的-步驟3中的lc.Fill()-所以沒有無知的代碼觸發(fā)的魔法。同時注意,所有后續(xù)操作可發(fā)生在本地高速緩存中,并且因此穿層被最小化(連同在中間層上的狀態(tài)的伴隨維護)。應(yīng)該理解,由上述代碼片斷隱含的模型與在ADO.NET.中的數(shù)據(jù)集模型是相當類似的。CDP也可提供一種斷開模型。
2層應(yīng)用程序不應(yīng)該部署在3層環(huán)境中,除非以下條件中的一個為真(a)它只使用斷開編程模型,或(b)它被重寫以使用斷開的編程模型。
CDP使用在3層部署中同時允許連接和斷開的編程模型的方法。應(yīng)用程序?qū)⒈唤o予一個方針一如果“它們期望被部署在三層環(huán)境中,則它們應(yīng)該使用斷開的高速緩存?!睘閷σ韵掠懻揅DP存儲的章節(jié)建立上下文,應(yīng)該注意,所有SQL Server數(shù)據(jù)的整體在以下的4級分層結(jié)構(gòu)中分區(qū)實例、數(shù)據(jù)庫、模式和表??蛇B接單元是一個實例;數(shù)據(jù)庫是容器,在此容器上定義了備份、恢復(fù)和復(fù)制。數(shù)據(jù)庫和模式的組合為查詢提供了上下文。CDP使用一個3級分層結(jié)構(gòu)存儲、模式和類型。CDP存儲是可連接單元;模式為查詢提供了上下文。給定模式可由多個CDP存儲主存(例如,一組類型(CRM模式)可部署在兩個不同的CDP實例上)。如果“同一性”是需要的,那么應(yīng)該使用CDP的外部機制(復(fù)制、批量復(fù)制)。給定CDP存儲可以有多個部署在其上的模式——諸如HR模式、會計模式等等。
命名和發(fā)現(xiàn)在此討論。考慮以下前述代碼的第3行。
Using(StorageContext sc=new StorageContext(@\\corp00l\defaultstore))以下著眼于CDP存儲的命名和可用存儲器的發(fā)現(xiàn)。CDP存儲被更清楚地定義。有兩種可能性1.它是實際的、物理存儲——實際服務(wù)器上的數(shù)據(jù)庫。
2.它是邏輯存儲——對于ctor的形參標識了實體實例的邏輯容器。
事實上,這可以被部署為復(fù)制的物理存儲的場(farm),且前端服務(wù)器與負載平衡器合作以挑選形成此特定會話的上下文的實際物理存儲。
在CDP模型中,存儲上下文標識邏輯存儲而不是物理存儲。CDP不指定如何復(fù)制、備份/恢復(fù)工作于物理存儲級的機制。
關(guān)于ctor形參的格式,連接串是統(tǒng)一資源標識符,即URL。個別框架定義替換命名格式以供其應(yīng)用程序使用。例如,UAF可能選擇讓其應(yīng)用程序通過指定UNC名(例如,\\server\share)來建立存儲上下文。然而,應(yīng)當總是可能通過URI連接到CDP存儲;換言之,框架使用的任何替換名稱必須有到對應(yīng)的CDP級URI的良好定義的映射。
CDP不指定存儲如何被發(fā)現(xiàn)。期望的是應(yīng)用程序可為此可使用現(xiàn)有的機制和存儲庫(例如,UDDI)。另外,框架可指定其自己的發(fā)現(xiàn)方法。
在本節(jié)中描述了應(yīng)用程序能充分利用的附加CDP服務(wù)。這些服務(wù)包括●監(jiān)視/通知服務(wù)●同步服務(wù)●顯式高速緩存服務(wù)●實用程序操作這部分應(yīng)該被認為是描述性的,而非體系結(jié)構(gòu)的。
監(jiān)視/通知服務(wù)。通知(也稱為監(jiān)控程序)提供引發(fā)對持久保存在底層存儲中的實體(數(shù)據(jù))的改變的異步通知的能力。應(yīng)用程序(或者任何其他組件)可使用此項服務(wù)來監(jiān)控持久保存的實體的改變。應(yīng)用程序?qū)碛袑ζ浔O(jiān)控的內(nèi)容和它們被通知的頻率的完全控制。例如,多應(yīng)用程序視圖(RAV)通知是使用監(jiān)控程序來構(gòu)建的;客戶機端瀏覽應(yīng)用程序使用這些通知,利用RAV來積極地對數(shù)據(jù)改變作出反應(yīng)。
CDP編程模型支持能夠監(jiān)控實體中的改變的Watcher(監(jiān)控程序)類。實體監(jiān)控程序機制足夠使框架和應(yīng)用程序構(gòu)建更高級的監(jiān)控程序抽象。例如,基于數(shù)據(jù)庫的文件存儲系統(tǒng)可在實體監(jiān)控程序抽象上構(gòu)建項、項擴展和鏈接監(jiān)控程序抽象(例如,注意,實體是可被監(jiān)控的最細粒度的數(shù)據(jù)片段)。
同步服務(wù)。寫入CDP的應(yīng)用程序及其之上的框架都將從下面的同步相關(guān)服務(wù)中獲益1)用于改變跟蹤的模式注解。模式設(shè)計者可為其實體類型指定改變單元邊界。改變單元規(guī)范控制改變跟蹤服務(wù)的運作。
2)改變跟蹤。很大程度上對應(yīng)用程序是不可見的,它在所有CDP操作期間維護改變單元的版本,以及諸如實體刪除等關(guān)鍵操作的日志。改變跟蹤即使在傳統(tǒng)應(yīng)用程序持續(xù)作出繞過CDP運行庫的變化時也能正確地運作。
3)改變列舉。允許CDP應(yīng)用程序檢索實體集及其在特定水印前已經(jīng)被修改的改變單元。改變作為CDP實體和行集返回。面對失敗、備份和恢復(fù)以及復(fù)雜的同步拓撲結(jié)構(gòu),提供了一組服務(wù)用于水印維護。
4)沖突檢測。允許CDP應(yīng)用程序確定CDP操作(諸如更新)是否與已經(jīng)執(zhí)行的操作(同樣基于水印)沖突。
使用該核心功能,框架可以構(gòu)建附加的、更高級的同步服務(wù)。
顯式高速緩存服務(wù)。CDP中的顯式高速緩存服務(wù)提供了應(yīng)用程序的改進的性能/可縮放性、對斷開的編程模型的支持(例如,注意,斷開的編程模型可以無需全特征顯式高速緩存的益處來實現(xiàn))以及對瞬態(tài)數(shù)據(jù)的支持。以下可以作為顯式高速緩存的特征● 高速緩存不同類型的數(shù)據(jù)(例如實體、非結(jié)構(gòu)化的和XML數(shù)據(jù))● 不同的高速緩存訪問模式(例如只讀、讀寫、共享等)● 與所存儲數(shù)據(jù)的高速緩存一致性(例如對于存儲在SQL Server中的數(shù)據(jù))● 跨多個CDP高速緩存對應(yīng)用程序故障轉(zhuǎn)移的高速緩存(某些類型的數(shù)據(jù),例如會話上下文數(shù)據(jù))一致性。
用于顯式高速緩存的編程表面可展示● 高速緩存的創(chuàng)建;● 高速緩存的填充● 將(部分數(shù)據(jù)的)高速緩存持久保存到底層存儲● 查詢和更新經(jīng)高速緩存的數(shù)據(jù)實用程序操作。CDP提供對實體和實體集合上的各種管理和實用程序操作的支持。這種操作的示例包括復(fù)制、移動、串行化/反串行化以及備份/恢復(fù)。
現(xiàn)在回到圖18,示出了使用實體對項目進行建模?;跀?shù)據(jù)庫的文件存儲系統(tǒng)(例如WINFS)實現(xiàn)包括CDP和用戶應(yīng)用程序框架(UAF)兩者的各方面。注意,CDP體系結(jié)構(gòu)并不意味著重寫基于數(shù)據(jù)庫的文件存儲系統(tǒng),而僅是對其中的組件的再分割。
在本節(jié)中,定義了UAF,并接著檢查基于數(shù)據(jù)庫的文件存儲系統(tǒng)的各個組件是如何被分割成UAF和CDP的。
UAF是有關(guān)對“用戶”數(shù)據(jù)建模的CDP框架。用戶數(shù)據(jù)是指與典型最終用戶有關(guān)的公用的、日常的數(shù)據(jù),諸如文檔、照片、音樂和聯(lián)系人等。
UAF向基本CDP基礎(chǔ)結(jié)構(gòu)添加了● 基本項目類型(以及相關(guān)類型)● 用于對用戶數(shù)據(jù)建模的實際類型● 諸如生存期管理、包含等約束
● 用戶可以對項進行的動作移動、復(fù)制、重命名、串行化...
● 用于項的組織構(gòu)造容器、列表、自動列表、注解、類別● 對項的最終用戶編程抽象(諸如規(guī)則創(chuàng)作)應(yīng)該理解和明白,對于應(yīng)用程序設(shè)計人員,CDP是UAF編程模型。
特別地,圖18描述了UAF中項的概念以及它實際上是如何從若干個實體導(dǎo)出的。文檔項1802可以從若干個實體中導(dǎo)出,這些實體諸如但不限于文檔1804、多個鏈接1806以及文檔擴展1808。作者項1810可以從若干個實體中導(dǎo)出,這些實體諸如但不限于,作者1812和作者擴展1814。
轉(zhuǎn)向圖19,示出了可擴展機制,用于通過在CDP之上實現(xiàn)UAF來實現(xiàn)各種功能。由于UAF是構(gòu)建在CDP之上的,因此它可以使用CDP可擴展性機制來實現(xiàn)附加功能。UAF在CDP上的構(gòu)建可以包括各種層和/或組件。存儲1902可以包括CDP約束引擎1904,其中CDP約束引擎1904包括至少一個UAF約束1906。CDP運行庫1908可以包括BL主機1912,BL主機可以包括UAF項行為1910。UAF項行為1910還可包括UAF可綁定行為1914。在CDP運行庫1908之上可以存在任何其他的UAF服務(wù)1916。
UAF使用CDP的約束引擎來強制實施項語義(以及其他類型語義)。這些是使用CSDL來創(chuàng)作的,且模式生成器為它們創(chuàng)建存儲級約束。諸如移動、串行化等項行為是使用CDP的BL機制來實現(xiàn)的。UAF類型可以具有與其相關(guān)聯(lián)的可綁定行為。這些行為是在設(shè)計和開發(fā)了類型之后由UAF應(yīng)用程序開發(fā)人員創(chuàng)作的。諸如同步、元數(shù)據(jù)處理等其他UAF服務(wù)被實現(xiàn)為常規(guī)CDP代碼。一并考慮,這些運行在CDP的各個層上的單獨的邏輯形成了UAF。
以下描述適用于在CDP和UAF之間劃分基于數(shù)據(jù)庫的文件存儲系統(tǒng)?;跀?shù)據(jù)庫的文件存儲系統(tǒng)中的以下能力屬于CDP層1.1.O-R映射-實體到表格的映射。CDP支持非命令性映射以便處理POCO情況以及基于數(shù)據(jù)庫的文件存儲系統(tǒng)服務(wù)器情況。這也包括更新映射,從而提供對實體(以及導(dǎo)出的)類型的基本CUD操作。
2.OPath查詢映射3.實體和其他CDM核心類型的實現(xiàn)4.StorageContext和StorageSearcher以及會話和事務(wù)管理5.會話高速緩存,高速緩存刷新邏輯(SaveChanges)6.改變跟蹤
7.對實體類型的監(jiān)控程序8.指針服務(wù),包括RAV9.項級安全性強制實施機制(行級安全性,安全性判定包括在類型視圖中)基于數(shù)據(jù)庫的文件存儲系統(tǒng)中的以下能力屬于UAF層1.可綁定的、每個實例的行為2.基于數(shù)據(jù)庫文件存儲系統(tǒng)API元數(shù)據(jù)(客戶機類和行為被表達為CLR元數(shù)據(jù))3.項級方法(復(fù)制、移動、串行化、重命名)4.同步、同步范圍、改變枚舉5.對容器的監(jiān)控程序6.有效路徑名計算和項域的路徑表7.元數(shù)據(jù)處理程序8.基于數(shù)據(jù)庫的文件存儲系統(tǒng)名字空間9.用于強制實施項一致性的代碼(容器、項部分、鏈接、文件流、生存期管理等)圖20示出了在CDP上實現(xiàn)的LOB應(yīng)用程序的示例。以下描述LOB框架要求以及它們?nèi)绾文軌虮籆DP支持。業(yè)務(wù)框架應(yīng)用程序可以被看作LOB應(yīng)用程序。用于業(yè)務(wù)應(yīng)用程序的核心特征集是作為共享業(yè)務(wù)組件的包。這些組件的分組管理不同的業(yè)務(wù)功能,諸如財務(wù)中的分類總帳到CRM中的銷售人員自動服務(wù)。關(guān)鍵的特征是這些組件是不知名的、可擴展的,且可用于根據(jù)所使用功能和復(fù)雜級別來滿足多種市場的需求。
業(yè)務(wù)框架(BF)可以由業(yè)務(wù)解決方案框架和業(yè)務(wù)應(yīng)用程序框架組成。業(yè)務(wù)解決方案框架提供了可用于構(gòu)建大多數(shù)業(yè)務(wù)應(yīng)用程序的功能。這包括基本業(yè)務(wù)數(shù)據(jù)類型,諸如貨幣和數(shù)量;應(yīng)用程序家族范圍的業(yè)務(wù)實體,諸如顧客、業(yè)務(wù)單元、多貨幣信息和付款術(shù)語;用于實現(xiàn)公用業(yè)務(wù)模式的構(gòu)建塊,諸如業(yè)務(wù)交易和帳戶;以及公用業(yè)務(wù)處理模式,諸如用于發(fā)送業(yè)務(wù)交易。
解決方案框架是使用業(yè)務(wù)應(yīng)用程序框架來編寫的,后者通過提供用于數(shù)據(jù)訪問、安全性、用戶界面、工作流、組件編程模型等的豐富服務(wù)來支持編寫組件。如果由解決方案框架定義的業(yè)務(wù)模型和規(guī)則不適用于一個應(yīng)用程序,那么它會被繞過,且應(yīng)用程序的開放人員會直接使用應(yīng)用程序框架。
業(yè)務(wù)應(yīng)用程序框架提供一種命令性編程模型,該模型使用.NET框架,且將其能力集中到業(yè)務(wù)應(yīng)用程序上。在相當可擴展的同時,它為應(yīng)用程序開發(fā)人員作出了很多較為通用的解決方案不會作出的決定,從而提高了使用它的生態(tài)系統(tǒng)中所有應(yīng)用程序的實現(xiàn)和結(jié)構(gòu)的生產(chǎn)力和一致性。業(yè)務(wù)應(yīng)用程序框架提供了用于編寫基于web的分布式OLTP應(yīng)用程序的編程模型和服務(wù)。它可能不包含專用于任何產(chǎn)品的業(yè)務(wù)邏輯,因此不僅適合創(chuàng)作業(yè)務(wù)應(yīng)用程序,也適合符合其基本概況的任何其他應(yīng)用程序。它提供了一組服務(wù),該組服務(wù)提供了對數(shù)據(jù)訪問、消息通信(諸如使用SOAP和其他協(xié)議)、工作流、事件代理、實例激活、診斷、配置、元數(shù)據(jù)管理(反射)、應(yīng)用程序組件安全性、全球化、業(yè)務(wù)桌面外殼等的支持。對CDP的要求主要來自于BF的業(yè)務(wù)應(yīng)用程序框架部分,特別是在數(shù)據(jù)訪問和數(shù)據(jù)邏輯遙控的范圍內(nèi)。
實體持久性(EP),業(yè)務(wù)框架中的數(shù)據(jù)訪問子系統(tǒng)支持基于實用對象關(guān)系型映射框架的豐富數(shù)據(jù)模型。它是關(guān)系型對象,因為開發(fā)人員處理被映射到關(guān)系行的(C#)對象。核心數(shù)據(jù)建模概念是實體和實體之間的關(guān)系。公共數(shù)據(jù)模型(CDM)本質(zhì)上支持BF數(shù)據(jù)訪問的數(shù)據(jù)建模需求。MBF EP要求對以下數(shù)據(jù)訪問動作的支持● 實體創(chuàng)建、讀取、更新和刪除● 返回數(shù)據(jù)集的特別查詢● 在數(shù)據(jù)庫中執(zhí)行的基于集合的操作BF規(guī)定了用于支持分布式面向服務(wù)的配置的代理/服務(wù)框架。給定某些業(yè)務(wù)功能,代理盡可能地接近功能的用戶而運行,服務(wù)盡可能地接近數(shù)據(jù)而運行。“盡可能接近”隨著每個部署環(huán)境和用戶類型而不同。代理/服務(wù)模式提供從2層(客戶機-服務(wù)器)到多層部署的部署靈活性。在這種部署中,服務(wù)提供可以跨服務(wù)邊界來調(diào)用的接口;代理一般取得接近于客戶機(用戶)的數(shù)據(jù),對其進行操作并將改變傳播到服務(wù)。
特別地,圖20示出了LOB框架和/或應(yīng)用程序如何能使用CDP??蚣芎褪褂每蚣軜?gòu)建的應(yīng)用程序可以被主存在中間層的超應(yīng)用程序服務(wù)器2002中。它可以用到客戶機應(yīng)用程序2004的web服務(wù)接口的形式提供標準的LOB服務(wù),諸如但不限于工作流、消息通信、業(yè)務(wù)處理等。超應(yīng)用程序服務(wù)器2002可以使用CDP來創(chuàng)作存儲約束2006(經(jīng)由CDP約束引擎2014)和以數(shù)據(jù)為中心的業(yè)務(wù)邏輯2008。客戶機應(yīng)用程序2004可以在Indigo通道上調(diào)用web服務(wù)方法(例如,使用web服務(wù)代理2010和web服務(wù)接口2012)。此外,它可以為其目標持久性/數(shù)據(jù)訪問需求使用客戶機層上的CDP。
CDP可以滿足以下1)會話管理;2)CRUD;3)公共數(shù)據(jù)模型(CDM)支持(例如實體抽象、實體擴展);4)查詢(例如特別、實體);5)運行對象高速緩存(隱式);6)并發(fā)性管理(例如優(yōu)化、隔離級別、沖突檢測等);7)業(yè)務(wù)邏輯(例如在方法、確認/默認值、屬性模式、事件中);8)安全性擴展;9)與提供者(例如,關(guān)系型、基于數(shù)據(jù)庫的文件存儲系統(tǒng))的映射(查詢、模式);10)擴展元數(shù)據(jù)的能力(支持實體的其他使用);11)設(shè)置操作;12)調(diào)用存儲過程的能力;以及13)N層部署。
BF實體持久性自然符合CDP。CDP完全支持大多數(shù)BF的持久性要求。CDP也解決一些SOA要求。然而,對代理/服務(wù)模型的完全支持,BF業(yè)務(wù)操作和過程可以構(gòu)建在CDP上作為LOB框架。MBF的業(yè)務(wù)解決方案框架也位于CDP之上的層。
圖21和22示出了依照本發(fā)明的方法。為了簡化解釋,方法被示出和描述為一系列動作。應(yīng)該理解,本發(fā)明不限于所示的動作和/或動作的順序,例如動作可以按不同的順序和/或與這里沒有呈現(xiàn)和描述的動作同時發(fā)生。此外,并非所示的所有動作都是實現(xiàn)依照本發(fā)明的方法所必需的。此外,本領(lǐng)域的技術(shù)人員會理解和明白,方法可以經(jīng)由狀態(tài)圖或事件可選地被表示為一系列相關(guān)的狀態(tài)。
圖21示出了便于在CDP的各種組件內(nèi)管理數(shù)據(jù)流的方法。在參考標號2102處,應(yīng)用程序創(chuàng)建訂單數(shù)據(jù)對象。訂單數(shù)據(jù)類可以表示在CDM模式中描述的表集類型。訂單數(shù)據(jù)對象創(chuàng)建可以如與存儲器交互所需地配置的存儲上下文對象。在參考標號2104處,通過發(fā)起會話并創(chuàng)建事務(wù)上下文來打開到存儲器的連接,在該上下文中建立了安全上下文。在參考標號2106處,存儲上下文的實例被返回給應(yīng)用程序。
在參考標號2108處,展示接口以便基于CDM查詢檢索對象。在參考標號2110處,在適當?shù)貞?yīng)用安全性的同時,查詢被映射到SQL中。此外,應(yīng)用程序/用戶只能夠看到被允許看到的數(shù)據(jù)。在參考標號2112處,來自查詢的結(jié)果被返回給CDP運行庫并返回給應(yīng)用程序。在參考標號2114處,可以對經(jīng)封裝的存儲上下文對象調(diào)用保存改變功能以便刷新改變。
圖22示出了便于跨多個不同的框架部署CDP的方法,其中完全不同的應(yīng)用程序可以與每個框架相關(guān)。在參考標號2202處,創(chuàng)建能夠存儲結(jié)構(gòu)化的、半結(jié)構(gòu)化的和非結(jié)構(gòu)化的數(shù)據(jù)的數(shù)據(jù)存儲。在參考標號2204處,創(chuàng)建CDP并將其覆蓋到數(shù)據(jù)存儲上。繼續(xù)在參考標號2206處,具有相關(guān)聯(lián)的完全不同的應(yīng)用程序的多個框架可以訪問數(shù)據(jù)存儲。在參考標號2208處,共享數(shù)據(jù)被提供給完全不同框架上的完全不同的應(yīng)用程序。換言之,數(shù)據(jù)存儲內(nèi)的數(shù)據(jù)可以在多個完全不同的應(yīng)用程序之間共享,而不管各自的框架是什么。在參考標號2210處,可以使用專用數(shù)據(jù),這樣使得專用數(shù)據(jù)可以對特定框架上的特定應(yīng)用程序是專用的。
現(xiàn)在參考圖23,示出了可用于執(zhí)行CDP的所揭示體系結(jié)構(gòu)和相關(guān)聯(lián)的組件和/或進程的計算機的框圖。為向本發(fā)明的各個方面提供額外的環(huán)境,圖23和以下論述旨在提供可在其中實現(xiàn)本發(fā)明的各方面的合適的操作環(huán)境910的簡要概括描述。雖然本發(fā)明是在諸如由一臺或多臺計算機或其它設(shè)備執(zhí)行的程序模塊等計算機可執(zhí)行指令的一般上下文環(huán)境中描述的,但本領(lǐng)域的技術(shù)人員會認識到,本發(fā)明也可以結(jié)合其它程序模塊實現(xiàn)和/或被實現(xiàn)為硬件和軟件的組合。
程序模塊一般包括可執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)等。此外,本領(lǐng)域的技術(shù)人員會理解,本發(fā)明的方法也可以在其他計算機系統(tǒng)配置中實現(xiàn),包括單處理器或多處理器計算機系統(tǒng)、小型機、大型機以及個人計算機、手持式計算設(shè)備、基于微處理器的系統(tǒng)、可編程消費者電子設(shè)備等,它們中的每一個可以在操作上耦合到一個或多個相關(guān)聯(lián)的設(shè)備。
所示方面也可以在分布式計算環(huán)境中實現(xiàn),其中可以使用經(jīng)由通信網(wǎng)絡(luò)鏈接的遠程處理設(shè)備來執(zhí)行某些任務(wù)。在分布式計算環(huán)境中,程序模塊可以位于本地和遠程存儲器存儲設(shè)備中。
計算機一般包括各種計算機可讀介質(zhì)。計算機可讀介質(zhì)可以是計算機可訪問的任何可用介質(zhì),包括易失性和非易失性介質(zhì)、可移動和不可移動介質(zhì)。作為示例而非限制,計算機可讀介質(zhì)可以包括計算機存儲介質(zhì)和通信介質(zhì)。計算機存儲介質(zhì)包括以任何方法或技術(shù)實現(xiàn)用于存儲諸如計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其他數(shù)據(jù)等信息的易失性和非易失性、可移動和不可移動介質(zhì)。計算機存儲介質(zhì)包括但不限于,RAM、ROM、EEPROM、閃存或其他存儲器技術(shù)、CD-ROM、數(shù)字多功能盤(DVD)或其他光盤存儲、磁盒、磁帶、磁盤存儲或其他磁存儲設(shè)備、或者任何其他可以用于存儲所希望信息且可以由計算機訪問的介質(zhì)。
通信介質(zhì)通常具體化為諸如載波或其它傳輸機制等已調(diào)制數(shù)據(jù)信號中的計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù),并包括任一信息傳送介質(zhì)。術(shù)語“已調(diào)制數(shù)據(jù)信號”指以對信號中的信息進行編碼的方式設(shè)置或改變其一個或多個特征的信號。作為示例而非局限,通信介質(zhì)包括有線介質(zhì),如有線網(wǎng)絡(luò)或直接連線連接,以及無線介質(zhì),如聲學(xué)、RF、紅外和其它無線介質(zhì)。上述任一的組合也應(yīng)當包括在計算機可讀介質(zhì)的范圍之內(nèi)。
再參考圖23,用于實現(xiàn)各個方面的示例性環(huán)境2300包括計算機2302,計算機2302包括處理單元2304、系統(tǒng)存儲器2306和系統(tǒng)總線2308。系統(tǒng)總線2308將包括但不限于系統(tǒng)存儲器2306的系統(tǒng)組件耦合到處理單元2304。處理單元2304可以是可以各種商業(yè)上可用的處理器中的任意一種。也可以采用雙微處理器和其他多處理器體系結(jié)構(gòu)作為處理單元2304。
系統(tǒng)總線2308可以是若干種總線結(jié)構(gòu)類型的任一種,它可以進一步互連到存儲器總線(有或沒有存儲器控制器)、外圍總線以及使用多種市場上可購買的總線體系結(jié)構(gòu)中任意一種的局部總線。系統(tǒng)存儲器2306包括只讀存儲器(ROM)2310和隨機存取存儲器(RAM)2312?;据斎?輸出系統(tǒng)(BIOS)存儲在諸如ROM、EPROM、EEPROM等非易失性存儲器2310中,其中BIOS包括如在啟動時幫助在計算機2302內(nèi)的元件之間傳輸信息的基本例程。RAM 2312通常包含諸如用于高速緩存數(shù)據(jù)的靜態(tài)RAM等高速RAM。
計算機2302還包括內(nèi)部硬盤驅(qū)動器(HDD)2314(例如EIDE、SATA),它也可以被配置成在適當?shù)耐鈿?未示出)中供外部使用;磁軟盤驅(qū)動器(FDD)2316(例如從可移動磁盤2318中讀取或?qū)懭氲狡渲?和光盤驅(qū)動器2320(例如讀取CD-ROM盤2322或從諸如DVD等其他高容量光媒體讀取或?qū)懭氲狡渲?。硬盤驅(qū)動器2314、磁盤驅(qū)動器2316和光盤驅(qū)動器2320分別通過硬盤驅(qū)動器接口2324、磁盤驅(qū)動器2326和光盤驅(qū)動器2328被連接到系統(tǒng)總線2308。用于外部驅(qū)動器實現(xiàn)的接口2324包括通用串行總線(USB)和IEEE 1394接口技術(shù)的至少之一或兩者兼有。
所述驅(qū)動器和其他相關(guān)聯(lián)的計算機可讀介質(zhì)提供了對數(shù)據(jù)、數(shù)據(jù)結(jié)構(gòu)、計算機可執(zhí)行指令等的非易失性存儲。對于計算機2302,驅(qū)動器和介質(zhì)以適當?shù)臄?shù)字格式容納任何數(shù)據(jù)的存儲。雖然上述對計算機可讀介質(zhì)的描述是指HDD、可移動磁盤和諸如CD或DVD等可移動光盤,但本領(lǐng)域的技術(shù)人員應(yīng)該理解,諸如Zip驅(qū)動器、磁帶盒、閃存卡、盒式磁帶等計算機可讀的其他類型的介質(zhì)也可以用在示例性操作環(huán)境中,而且,任何這樣的介質(zhì)可以包含用于執(zhí)行本發(fā)明的方法的計算機可執(zhí)行指令。
多個程序模塊可以被存儲在驅(qū)動器和RAM 2312中,包括操作系統(tǒng)2330、一個或多個應(yīng)用程序2332、其他程序模塊2334和程序數(shù)據(jù)2336。操作系統(tǒng)、應(yīng)用程序、模塊和/或數(shù)據(jù)的全部或部分也可以高速緩存在RAM 2314中。應(yīng)該理解,本體系結(jié)構(gòu)可以用各種市場上可購買的操作系統(tǒng)或操作系統(tǒng)的組合來實現(xiàn)。
用戶可以通過一個或多個有線/無線輸入設(shè)備輸入命令和信息到計算機2302中,輸入設(shè)備諸如鍵盤2338和諸如鼠標2340等指點設(shè)備。其它輸入設(shè)備(未示出)可以包括麥克風(fēng)、IR遙控器、操縱桿、游戲墊、指示筆、觸摸屏等等。這些和其它輸入設(shè)備一般通過耦合到系統(tǒng)總線2308的輸入設(shè)備接口2342連接到處理單元2304,但也可能由其它接口連接,諸如并行端口、IEEE 1394串行端口、游戲端口、USB端口、IR接口等等。
監(jiān)視器2344或其他類型的顯示設(shè)備也可以經(jīng)由諸如視頻適配器2346等接口連接到系統(tǒng)總線2308。除了監(jiān)視器2344之外,計算機通常包括其他外圍輸出設(shè)備(未示出),諸如揚聲器、打印機等。
計算機2302可使用到一個或多個諸如遠程計算機2348這樣的遠程計算機的邏輯連接在網(wǎng)絡(luò)環(huán)境內(nèi)工作。遠程計算機2348可以是工作站、服務(wù)器、路由器、個人計算機、便攜式計算機、基于微處理器的娛樂設(shè)備、對等設(shè)備或其它常見的網(wǎng)絡(luò)節(jié)點,并且一般包括上文相對于計算機2302所描述的許多或所有元件,然而為了簡明起見,僅示出了存儲器存儲設(shè)備2350。所示的邏輯連接包括到局域網(wǎng)(LAN)2352和或諸如廣域網(wǎng)(WAN)2354等較大網(wǎng)絡(luò)的有線/無線連接。這種LAN和WAN網(wǎng)絡(luò)環(huán)境常見于辦公室和公司,且便于諸如企業(yè)內(nèi)部互聯(lián)網(wǎng)等企業(yè)范圍的計算機網(wǎng)絡(luò),其中它們都可連接到例如因特網(wǎng)等全球通信網(wǎng)絡(luò)。
當用于LAN網(wǎng)絡(luò)環(huán)境時,計算機2302通過有線和/或無線通信網(wǎng)絡(luò)接口或適配器2356連接到局域網(wǎng)2352。適配器2356便于到LAN 2352的有線或無線通信,LAN 2352也包括置于其上的無線接入點,用于與無線適配器2356的通信。
當用在WAN網(wǎng)絡(luò)環(huán)境中時,計算機2302可以包括調(diào)制解調(diào)器2358或連接到WAN 2354上的通信服務(wù)器上,或者具有其他用于通過WAN 2354,諸如通過Internet建立通信的裝置。調(diào)制解調(diào)器2358,可以是內(nèi)置的或外置的,且可以是有線或無線設(shè)備,它經(jīng)由串行端口接口2342連接到系統(tǒng)總線2308。在網(wǎng)絡(luò)環(huán)境中,相對于計算機2302或其部分所描述的程序模塊可以存儲在遠程存儲器/存儲設(shè)備2350中。應(yīng)該理解,所示的網(wǎng)絡(luò)連接是示例性的,且可以使用在計算機之間建立通信鏈路的其他手段。
計算機2302可以用于與任何在操作上置于無線通信中的無線設(shè)備或?qū)嶓w通信,例如打印機、掃描儀、臺式和/或便攜式計算機、便攜式數(shù)據(jù)助理、通信衛(wèi)星、與無線可監(jiān)測標記(例如公用電話亭、報亭、休息室)相關(guān)聯(lián)的任何設(shè)備或位置、以及電話。這至少包括無線保真(Wi-Fi)和BluetoothTM(藍牙)無線技術(shù)。因此,通信可以是諸如傳統(tǒng)網(wǎng)絡(luò)等的預(yù)定義結(jié)構(gòu)或簡單地是至少兩臺設(shè)備之間的特別通信。
Wi-Fi或無線保真允許從家里的沙發(fā)、賓館房間的床上、工作地點的會議室到因特網(wǎng)的無線連接。Wi-Fi是一種類似于用在蜂窩電話中的無線技術(shù),它允許諸如計算機等設(shè)備在基站范圍內(nèi)的任何地方在戶內(nèi)或戶外發(fā)送和接收數(shù)據(jù)。Wi-Fi網(wǎng)絡(luò)使用稱為IEEE 802.11(a、b、g等等)的無線技術(shù)來提供安全的、可靠的、快速的無線連接。Wi-Fi網(wǎng)絡(luò)可以用于將計算機互相連接、將計算機連接到因特網(wǎng)和到有線網(wǎng)絡(luò)(使用IEEE 802.3或以太網(wǎng))。Wi-Fi網(wǎng)絡(luò)工作在未經(jīng)許可的2.4和5GHz無線波段,以11Mbps(802.11a)或54Mbps(802.11b)的數(shù)據(jù)速率工作,或使用同時包含兩個波段(雙波段)的產(chǎn)品,使得網(wǎng)絡(luò)可以提供類似于在許多辦公室中使用的基本10BaseT有線以太網(wǎng)網(wǎng)絡(luò)的真實性能。
現(xiàn)在參見圖24,示出了可由CDP使用的示例性計算環(huán)境2400以及各自的組件和/或用于提供數(shù)據(jù)管理的進程的示意性框圖。系統(tǒng)2400包括一個或多個客戶機2402。客戶機2401可以是硬件和/或軟件(例如線程、進程、計算設(shè)備)??蛻魴C2402可以例如通過采用本發(fā)明的體系結(jié)構(gòu)容納cookie和/或相關(guān)聯(lián)的上下文信息。
系統(tǒng)2400也包括一個或多個服務(wù)器2404。服務(wù)器2404也可以是硬件和/或軟件(例如線程、進程、計算設(shè)備)。服務(wù)器2404可以例如通過采用本發(fā)明的體系結(jié)構(gòu)容納線程來執(zhí)行轉(zhuǎn)換。客戶機1202和服務(wù)器2404之間的一個可能的通信可以是適用于在兩個或多個計算機進程之間發(fā)送的數(shù)據(jù)分組的形式。數(shù)據(jù)分組可以包括例如cookie和/或相關(guān)聯(lián)的上下文信息。系統(tǒng)2400包括通信框架2406(諸如因特網(wǎng)等全球通信網(wǎng)絡(luò)),它可用于便于客戶機2402和服務(wù)器2404之間的通信。
可以經(jīng)由有線(包括光纖)和/或無線技術(shù)來促進通信??蛻魴C2402在操作上可以連接到一個或多個客戶機數(shù)據(jù)存儲2408,該客戶機數(shù)據(jù)存儲1208可以用于存儲對客戶機2402而言本地的信息(例如cookie和/或相關(guān)聯(lián)的上下文信息)。類似地,服務(wù)器2404在操作上可以連接到一個或多個服務(wù)器數(shù)據(jù)存儲2410,該服務(wù)器數(shù)據(jù)存儲2410可用于存儲對服務(wù)器2404而言本地的信息。
以上描述的包括示例。當然,不可能為了描述本發(fā)明而描述組件或方法的每種想象得到的組合,但是本領(lǐng)域的技術(shù)人員會認識到,可能有許多其他的組合和變換。因此,本發(fā)明旨在包含落入所附權(quán)利要求書的精神和范圍內(nèi)的所有這樣的改變、修改和變化。此外,在詳細描述或權(quán)利要求中使用術(shù)語“包括”的意義上,這樣的術(shù)語旨在以類似于術(shù)語“包含”的方式是包含性的,如同術(shù)語“包含”在用作權(quán)利要求中的過渡詞時的解釋。
權(quán)利要求
1.一種通過提供可由允許對數(shù)據(jù)的統(tǒng)一訪問的多個完全不同的應(yīng)用程序框架訪問的數(shù)據(jù)服務(wù)來便于數(shù)據(jù)管理的數(shù)據(jù)平臺,包括應(yīng)用程序編程接口(API),它便于以公共類、接口和靜態(tài)助手函數(shù)中的至少一種的形式與應(yīng)用程序通信;運行庫組件,它接口到所述API,并提供對象-關(guān)系映射、查詢映射和約束強制實施中的至少一個;以及公用數(shù)據(jù)模型,它析出對所述多個完全不同的應(yīng)用程序框架公用的數(shù)據(jù)接口。
2.如權(quán)利要求1所述的平臺,其特征在于,所述公用數(shù)據(jù)模型便于創(chuàng)建域?qū)S妙愋汀⒓s束和關(guān)系中的至少一個。
3.如權(quán)利要求2所述的平臺,其特征在于,所述域?qū)S妙愋褪菍嶓w類型,所述實體類型是用于對屬性和方法中的至少一個進行分組的規(guī)范,其中,域?qū)S妙愋筒捎脤嶓w、表、表集和關(guān)系中的至少一個。
4.如權(quán)利要求3所述的平臺,其特征在于,模式定義了所述實體、關(guān)系和表集中的至少一個,使得名字空間與其相關(guān)聯(lián)。
5.如權(quán)利要求2所述的平臺,其特征在于,所述公用數(shù)據(jù)模型定義了所述特定域類型系統(tǒng)上的查詢語言,其中,所述查詢語言允許對于對象結(jié)構(gòu)的豐富查詢,所述對象結(jié)構(gòu)提供了對所存儲數(shù)據(jù)的類型化的、基于對象的抽象。
6.如權(quán)利要求5所述的平臺,其特征在于,所述查詢語言是Opath和OSQL(面向?qū)ο蟮慕Y(jié)構(gòu)化查詢語言)中的至少一個。
7.如權(quán)利要求1所述的平臺,其特征在于,還包括約束/安全性引擎,它便于聲明性地創(chuàng)作約束,并控制對所述數(shù)據(jù)平臺的至少一個實體的訪問。
8.如權(quán)利要求1所述的平臺,其特征在于,還包括持久化引擎,它通過調(diào)用命令性對象-關(guān)系映射和非命令性對象-關(guān)系映射中的至少一種來調(diào)用將語言類映射到底層表式表示的對象-關(guān)系映射。
9.如權(quán)利要求8所述的平臺,其特征在于,所述映射是從應(yīng)用程序空間到所述公用數(shù)據(jù)模型的映射,且獨立于從所述公用數(shù)據(jù)模型到存儲的映射。
10.如權(quán)利要求1所述的平臺,其特征在于,所述多個完全不同的應(yīng)用程序框架包括業(yè)務(wù)線框架、最終用戶框架、系統(tǒng)管理框架、用戶應(yīng)用程序框架、協(xié)作框架、業(yè)務(wù)框架和個人信息框架中的至少一個。
11.如權(quán)利要求1所述的平臺,其特征在于,所述應(yīng)用程序是最終用戶應(yīng)用程序、知識工作者應(yīng)用程序、業(yè)務(wù)線應(yīng)用程序、web應(yīng)用程序、聯(lián)系人管理應(yīng)用程序、文檔管理應(yīng)用程序、協(xié)作應(yīng)用程序、電子郵件應(yīng)用程序、顧客關(guān)系管理應(yīng)用程序、企業(yè)資源規(guī)劃應(yīng)用程序和系統(tǒng)管理應(yīng)用程序中的至少一個。
12.如權(quán)利要求1所述的平臺,其特征在于,所述運行庫組件提供對實體狀態(tài)的管理,所述實體狀態(tài)包括標識映射、對象改變追蹤和原始值的至少之一。
13.如權(quán)利要求1所述的平臺,其特征在于,所述數(shù)據(jù)平臺和各自的組件是層不可知的,且存在于客戶機層、中間層、服務(wù)器層和web服務(wù)層中的至少一個中。
14.如權(quán)利要求1所述的平臺,其特征在于,所述公用數(shù)據(jù)模型提供所述數(shù)據(jù)存儲組件內(nèi)的共享數(shù)據(jù),使得與對應(yīng)的框架相關(guān)聯(lián)的完全不同的應(yīng)用程序可以訪問所述共享數(shù)據(jù)。
15.如權(quán)利要求1所述的平臺,其特征在于,所述公用數(shù)據(jù)模型提供所述數(shù)據(jù)存儲組件內(nèi)的專用數(shù)據(jù),使得所述專用數(shù)據(jù)僅由與特定框架相關(guān)聯(lián)的特定應(yīng)用程序訪問。
16.如權(quán)利要求1所述的平臺,其特征在于,還包括規(guī)則服務(wù)、改變跟蹤服務(wù)、沖突檢測服務(wù)、事件處理服務(wù)和通知服務(wù)中的至少一個。
17.一種管理數(shù)據(jù)的計算機實現(xiàn)的方法,包括將數(shù)據(jù)平臺覆蓋在對結(jié)構(gòu)化的、半結(jié)構(gòu)化的和非結(jié)構(gòu)化的數(shù)據(jù)類型進行建模和存儲的存儲上,以便提供支持完全不同的應(yīng)用程序框架的豐富數(shù)據(jù)模型、映射、查詢和數(shù)據(jù)訪問機制中的至少一個的服務(wù);將一個或多個應(yīng)用程序框架覆蓋到所述數(shù)據(jù)平臺上,以便允許每個框架中的至少一個應(yīng)用程序訪問所述數(shù)據(jù)存儲;以公共類、接口和靜態(tài)助手函數(shù)中的至少一種的形式與應(yīng)用程序通信;提供對象-關(guān)系映射、查詢映射和約束強制實施中至少一種;以及析出對多種完全不同的應(yīng)用程序框架公用的建模概念。
18.如權(quán)利要求17所述的方法,其特征在于,還包括創(chuàng)建對象;使用會話打開到所述存儲的連接并建立安全上下文;將存儲上下文的實例返回給應(yīng)用程序;展示檢索對象的接口;在應(yīng)用安全性的同時,將查詢映射到SQL;將結(jié)果返回給數(shù)據(jù)平臺運行庫和所述應(yīng)用程序;以及保存經(jīng)封裝的存儲上下文對象上的改變。
19.如權(quán)利要求17所述的方法,其特征在于,還包括將共享數(shù)據(jù)提供給所述完全不同的應(yīng)用程序框架上完全不同的應(yīng)用程序;以及使用專用于特定的完全不同的應(yīng)用程序框架上的應(yīng)用程序的專用數(shù)據(jù)。
20.一種便于管理數(shù)據(jù)的計算機實現(xiàn)的系統(tǒng),包括用于以公共類、接口和靜態(tài)助手函數(shù)中至少一種的形式與應(yīng)用程序通信的裝置;用于提供對象-關(guān)系映射、查詢映射和約束強制實施中的至少一種的裝置;以及用于析出對多種完全不同的應(yīng)用程序框架公用的建模概念的裝置。
全文摘要
公用數(shù)據(jù)存儲和多個完全不同應(yīng)用程序框架的多個應(yīng)用程序之間的數(shù)據(jù)管理。提供了數(shù)據(jù)存儲組件以便于數(shù)據(jù)的存儲,其中數(shù)據(jù)包括結(jié)構(gòu)化的、半結(jié)構(gòu)化的和非結(jié)構(gòu)化的數(shù)據(jù)。該公用數(shù)據(jù)平臺接口到數(shù)據(jù)存儲組件,以便提供多個完全不同的應(yīng)用程序框架可訪問的數(shù)據(jù)服務(wù),該數(shù)據(jù)服務(wù)允許不同框架的相應(yīng)應(yīng)用程序訪問數(shù)據(jù)。
文檔編號G06F17/30GK1828527SQ200610004388
公開日2006年9月6日 申請日期2006年1月28日 優(yōu)先權(quán)日2005年2月28日
發(fā)明者A·K·諾瑞, A·T·懷特恩, D·伍德夫特, J·A·布雷克雷, P·賽利斯, P·賽莎德銳, S·H·阿加瓦爾, S·特雷克 申請人:微軟公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1