數據項管理器的製作方法
2023-04-23 20:46:31 2
專利名稱:數據項管理器的製作方法
數據項管理器
背景技術:
應用(application)和/或控制(control)可充當本地和/或遠程數據源的客戶端以顯示來自這些數據源的項列表。如本文所用的,列表為項的有序的序列且客戶端可為應用和/或控制。使用許多不同接口或協議之一從每個數據源獲得數據,且利用用戶接口呈現給終端用戶以便導航且可能修改列表。取決於數據源,可使用項在列表中的索引和/ 或使用「密鑰」來提取項,「密鑰」對於每個項不同且對於該項而言是不變的。某些數據源, 諸如本地數據源,能對於數據的請求同步響應,且數據源將請求的數據傳遞到項管理器,之後項管理器重新開始執行。這種對數據請求的響應通常花費比某響應時間閾值更少的時間,所述響應時間閾值例如是足夠低的閾值,使得響應的呈現可以顯得與相對應的請求實時。舉例而言,這樣的響應可用大約數十毫秒或更短。其它數據源,諸如遠程數據源,可異步響應,且在請求後,項管理器重新開始執行且在後來的時間從數據源接收請求的數據。這種對數據請求的響應通常花費比上文所討論的響應時間閾值更多的時間。當對列表中的數據做出變化時,數據源可或可不向應用生成通知。舉例而言,web伺服器通常並不在數據變化時向客戶端提供變化通知。
發明內容
所描述的實施例包括在本文中被稱作項管理器的模塊,其能與數據源經由在本文被稱作數據源適配器的另一模塊交互,且也能與客戶端交互以提供表示來自數據源的數據項的數據表示項的列表。如本文所用的,數據項為由數據源提供的項。數據項可為與在數據源中存儲相對應數據項的格式相同或不同的格式。數據表示項為數據項的表示且數據表示項可為與由數據表示項所表示的數據項相同或不同的格式。在一個實施例中,工具和技術可包括項管理器,項管理器經由數據源適配器從數據源請求數據項且經由數據源適配器從數據源接收數據項。項管理器也可維護表示從數據源接收的數據項的數據表示項的列表。此外,項管理器可向客戶端提供貫穿數據表示項的列表的列舉。項管理器也可向客戶端提供數據表示項的列表變化的通知。在另一實施例中,項管理器可經由數據源適配器從數據源請求和接收數據項。項管理器也可維護表示從數據源接收的數據項的數據表示項的列表。數據表示項可包括用戶接口元素。而且,維護該列表可包括調動再現器來再現來自從數據源接收的數據項的數據表示項且在該列表中包括數據表示項。項管理器可向客戶端提供貫穿數據表示項的列表的列舉。提供本發明內容以便以簡化的形式介紹概念的選擇。這些概念在具體實施方式
中進一步展開描述。此發明內容不預期標識所要求保護的主題的關鍵特徵或必要特徵,也不預期用於限制所要求保護的主題的範圍。類似地,本發明不限於解決背景技術具體實施方式
和附圖中討論的特定技術、工具、環境、缺點或優點的實施方式。
圖I為其中可實施所描述的實施例中的一個或多個的合適計算環境的方塊圖。圖2為數據項管理器系統或環境的示意圖。圖3為原始本地數據表示的一部分、所接收的以刷新操作提取的更新的數據項列表和在運行列表生成技術之後所得到的更新的本地數據表示的部分的示意圖。圖4為數據項管理器技術的流程圖。圖5為另一數據項管理器技術的流程圖。圖6為又一數據項管理器技術的流程圖。
具體實施例方式本文所述的實施例針對於用於改進客戶端的數據表示項的列表的處置的技術和工具。可通過單獨地或組合地使用各種技術和工具得到這些改進。這樣的技術和工具可包括項管理器,項管理器能通過數據源適配器與數據源接口從而獲得數據項。項管理器也可與客戶端接口以向客戶端提供貫穿表示數據項的數據表示項的列表的列舉。項管理器可提供本文所討論的特徵中的一個或多個特徵。舉例而言,數據表示項可為表示數據項的用戶接口元素。項管理器可支持數據表示項的列表的同步列舉,即使在數據表示項表示來自異步數據源的數據項時。舉例而言,這可使用佔位符來進行,如將在下文中所討論的那樣。如本文所用的,佔位符為代替所請求的數據表示項返回到客戶端的對象。佔位符可呈各種形式中的任何形式。舉例而言,佔位符(一個或多個)和在項管理器所維護的高速緩存中的實際數據表示項可呈再現的用戶接口元素的形式。可替換地,佔位符和/或數據表示項可呈某些其它形式,諸如呈不透明句柄(opaque handle)或某些其它數據類型的形式。此外,在由項管理器所用的本地數據表示中的佔位符可呈與響應於來自客戶端的請求而返回到客戶端的佔位符不同的形式。項管理器也可向客戶端提供數據表示項變化的通知,即使在項管理器與不提供針對表示的數據項的這種通知的數據源接口時。項管理器也可允許加載待優先化的數據表示項的資源,且也可延遲向客戶端提供數據表示項直到已加載了該數據表示項的資源為止。 此外,項管理器可提供數據表示項的同步更新,即使是對於異步數據源。項管理器可向客戶端提供數據的自相一致的快照(例如,無重複索引),即使是對於可快速變化的異步數據源。項管理器也可包括一個或多個特徵來改進較差網絡連接和其它故障的耐受性。項管理器可與數據源適配器接口以允許數據源返回比項管理器所請求的更少或更多項。而且,項管理器可請求數據表示項的列表的重疊子集。該重疊可由項管理器用於記住在列表中的定位而無需數據源維護光標,且其也可由項管理器用於檢測列表變化。項管理器可與數據源接口,無論數據源是否支持到數據源的數據項列表內的索引和/或允許使用「密鑰」提取項,「密鑰」對於每個數據項不同且對於該項而言是不變的。 項管理器也可提供數據虛擬化,其可以包括在數據項由客戶端請求時和通過釋放不再由客戶端使用的數據表示項來提取所述數據項。這可減小用於維護數據表示項的列表的帶寬和存儲。此外,項管理器可對數據表示項的用戶修改的狀態實施水合(hydration)(脫水 (dehydration)和再水合(rehydration))。舉例而言,狀態可為響應於用戶輸入所做出的變化,用戶輸入能通過存儲於特定位置,諸如存儲於存儲器和/或長期存儲設備中而脫水。該狀態能表示數據表示項的變化,諸如響應於用戶輸入的變化。項管理器能從列表移除數據表示(例如,通過刪除該表示和/或從存儲器移除整個列表),且能在後來將數據表示項重新插回到列表內。項管理器能將該狀態再水合回到數據表示項內。這可在數據表示項重新插入到列表內之前或之後進行。或者,項管理器可提供通知來允許客戶端執行狀態的脫水和再水合。在所附權利要求中所限定的主題不必限於本文所述的益處。本發明的特定實施方式可提供本文所述益處中的所有益處、某些益處或不提供任何本文所述的益處。儘管為了呈現起見,各種技術的操作在本文中以特定順序次序描述,但應了解這種描述方式涵蓋操作次序的重新布置,除非需要特定排序。舉例而言,順序描述的操作可在某些情況下重新布置或同時執行。此外,為了簡單起見,流程圖可不示出其中可結合其它技術使用的特定技術的各種方式。本文所述的技術可結合本文所述的系統中的一個或多個和/或結合一個或多個其它系統使用。舉例而言,本文所述的各種過程可利用硬體或軟體或二者的組合來實施。舉例而言,能構想到專用的硬體實施,諸如專用集成電路、可編程的邏輯陣列和其它硬體設備來實施本文所述技術中的一個或多個的至少一部分。可包括各種實施例的設備和系統的應用能廣泛地包括多種電子和計算機系統。可使用兩個或更多特別互連的硬體模塊或設備來實施技術,所述特別互連的硬體模塊或設備具有可以在模塊之間以及通過模塊傳送的控制和數據信號,或者作為專用集成電路的部分。此外,本文所述的技術可由計算機系統可執行的軟體程序來實施。舉例而言,實施方式可包括分布式處理、組件/對象分布式處理和並行處理。而且,能構想虛擬計算機系統處理來實施如本文所述的技術和功能中的一個或多個。I.示範性計算環境
圖I示出其中可實施所描述的實施例中的一個或多個的合適計算環境(100)的一般化實例。舉例而言,一個或多個這樣的計算環境可用作如本文所討論的客戶端、項管理器、 數據源適配器和/或數據源的環境。一般而言,能使用各種不同的通用或專用計算系統配置。可適於結合本文所述的工具和技術使用的熟知計算系統配置的實例包括但不限於伺服器場和伺服器集群、個人計算機、伺服器計算機、手持或膝上型設備、多處理器系統、基於微處理器的系統、可編程的消費電子器件、網絡PC、微型計算機、大型計算機、包括上述系統或設備中的任一個的分布式計算環境等。計算環境(100)不預期暗示對於本發明的用途或功能範圍的任何限制,因為本發明可在多種通用或專用計算環境中實施。參看圖1,計算環境(100)包括至少一個處理單元(110)和至少一個存儲器
(120)。在圖I中,這種最基本的配置(130)包括於虛線中。處理單元(110)執行計算機可執行的指令且可為真實的或虛擬的處理器。在多處理系統中,多個處理單元執行計算機可執行的指令以增強處理能力。至少一個存儲器(120)可為易失性存儲器(例如,寄存器、高速緩存、RAM)、非易失性存儲器(例如,ROM、EEPR0M、快閃記憶體)或這兩個的某種組合。至少一個存儲器(120)存儲實施數據項管理器的軟體(180)。儘管為了清楚起見,圖I的各個方塊以線示出,實際上描寫的各種組件並非如此清晰且象徵性地,下文所討論的圖I和其它附圖中的線將更準確地為灰色的且模糊的。舉例而言,可考慮諸如顯示設備的呈現組件為I/o組件。而且,處理器具有存儲器。本發明人認識到這是該技術的性質且重申圖I的示意圖只是說明可結合本發明的一個或多個實施例使用的示例性計算設備。在諸如「工作站」、「伺服器」、「膝上型計算機」、「手持設備」等類別之間並無區別,因為這些全都在圖I的範圍中設想到且指「計算機」、「計算環境」或「計算設備」。計算環境(100)可具有附加特徵。在圖I中,計算環境(100)包括存儲設備(140), 一個或多個輸入設備(150)、一個或多個輸出設備(160)和一個或多個通信連接(170)。諸如總線、控制器或網絡這樣的互連機構(未圖示)使得計算環境(100)的各組件互連。通常,作業系統軟體(未圖示)提供用於在計算環境(100)中執行的其它軟體的操作環境且協調計算環境(100)的組件的活動。存儲設備(140)可為可移除的或不可移除的,且可包括計算機可讀的存儲介質, 諸如磁碟、磁帶或磁盒、CD-ROM、CD-RW、DVD或任何其它介質,其可用於存儲信息且其可在計算環境(100)內被存取。存儲設備(140)存儲用於軟體(180)的指令。輸入設備(一個或多個)(150)可為觸摸輸入設備,諸如鍵盤、滑鼠、鋼筆或跟蹤球; 語音輸入設備;掃描設備;網絡適配器;CD/DVD讀取器;或提供輸入到計算環境(100)的另一個設備。輸出設備(一個或多個)(160)可為顯不器、印表機、揚聲器、⑶/DVD刻錄機、網絡適配器或提供來自計算環境(100)的輸出的另一設備。通信連接(一個或多個)(170)允許經過通信介質與另一計算實體通信。因此,計算環境(100)可使用到諸如個人計算機、伺服器、路由器、網絡PC、對等設備或另一公共網絡節點的一個或多個遠程計算設備的邏輯連接而操作於網絡化環境中。通信介質以調製數據信號傳達諸如數據或計算機可執行的指令或請求的信息。經調製的數據信號為其特徵中一個或多個特徵被設置或改變為使得在信號中編碼信息的信號。舉例而言且並無限制意義, 通信介質包括利用電、光學、RF、紅外、聲的或其它載波實施的有線或無線技術。工具和技術可在計算機可讀介質的一般情形下描述,其可為存儲介質或通信介質。計算機可讀存儲介質為能在計算環境內存取的任何可用存儲介質,但術語計算機可讀存儲介質並不指信號本身。舉例而言且並無限制意義,對於計算環境(100),計算機可讀存儲介質包括存儲器(120)、存儲設備(140)和上述組合。工具和技術能在計算機可執行的指令的一般情形下描述,諸如包括於程序模塊中,在目標真實或虛擬處理器上的計算環境中執行的那些。一般而言,程序模塊包括例程、 程序、庫、對象、類,組件、數據結構等,其執行特定任務或實施特定抽象數據類型。程序模塊的功能在各個實施例中可根據需要在程序模塊之間組合或拆分。用於程序模塊的計算機可執行的指令可在本地或分布式計算環境內執行。在分布式計算環境中,程序模塊可位於本地和遠程計算機存儲介質中。為了呈現起見,詳細描述使用如「確定」、「選擇」、「請求」和「接收」這樣的術語來描述在計算環境中的計算機操作。這些和其它類似術語為由計算機執行的操作的高層次抽象,且不應與人執行的行為混淆,除非明確地指出了由人(諸如「用戶」)執行行為。對應於這些術語的實際計算機操作取決於實施方式而變化。II.數據項管理系統和環境
圖2為數據項管理器系統或環境(200)的示意圖,結合數據項管理器系統或環境(200) 可實施所描述的實施例中的一個或多個。現將提供環境(200)的概要,之後為環境(200)的更詳細描述。A.數據項管理器環境的概要
環境(200)可包括項管理器(210),項管理器(210)能被配置成通過數據源適配器 (222)與數據源(220)交互。數據源適配器(222)能具體地被配置成與特定類型的數據源 (220)或甚至數據源(220)的特定實例交互。數據源(220)能管理數據項列表(226)中的數據項(224)。項管理器(210)能調用數據源接口(230),通過數據源適配器(222)從數據源 (220)提取數據項(224)。此外,數據源適配器(222)能調用數據通知處理程序接口(232) 以通知項管理器(210)數據項(224)的變化,如果數據源(220)能發布這種通知。項管理器(210)也可與項再現器(240)和佔位符再現器(242)交互。舉例而言, 再現器(240和242)能產生用於本地數據表示(250)的項,其表示在數據源(220)中的數據項列表(226)的至少一部分。舉例而言,項管理器(210)可調用項再現器(240)來將數據項(224)再現為數據表示項(254)。如果數據源(220)和數據源適配器(222)不同步地返回所請求的數據項(224),那麼項管理器(210)可調用佔位符再現器(224)來再現待用的佔位符(255)而不是實際數據表示項(254)直到返回了相對應的數據項(224)為止。佔位符(255)和數據表示項(254)能包括於數據表示項的列表(256)中,其能由項管理器(210) 管理。而且,項管理器(210)能使得數據表示項(254)和數據表示項的列表(256)的佔位符(255)對於客戶端(260)而言可用,向客戶端提供數據表示項的列表(256)的列舉。客戶端(260)可包括應用(262)、控制(264)或其組合。在圖2的圖示實施例中, 客戶端(260)包括應用(262)和控制(264)。但是,客戶端(260)可僅包括應用或僅包括控制。在圖2的實施例中,控制(264)能調用項管理器接口(270)以請求數據表示項(254) (此可認為是請求數據項(224)本身或從項管理器(210)請求數據表示項(254)。此外,項管理器(210)能調用元素通知處理程序接口(272)來通知控制(264)數據表示項的列表 (256)的變化。此外,列表編輯器接口(280)能由控制(264)或應用(262)調用以請求對數據表示項的列表(256)和數據項列表(226)做出變化。而且,項通知處理程序接口(282) 能由項管理器(210)調用以向應用(262)提供通知,諸如關於項管理器(210)狀態的通知, 以及如果客戶端(260)執行這些任務,脫水和再水合數據表示項(254)的狀態的通知。實際上,客戶端(260)能通過項管理器接口(270)請求數據表示項(254)。項管理器(210)又可以通過數據源適配器(222)從數據源(220)提取相對應的數據項(224)。 數據項(224)能經由數據源適配器(222)返回,且可由項再現器(240)實例化為數據表示項(254)且包括於數據表示項的列表(256)中。項管理器(210)能向客戶端(260)提供數據表示項(254),諸如通過向客戶端(260)提供到本地數據表示(250)中的項的指針。客戶端(260)也可通過列表編輯器接口(280)請求對數據表示項的列表(256)和數據項列表 (226)做出變化。項管理器(210)能對數據表示項的列表(256)做出這些變化且能通過調用數據源接口(230)並經由數據源適配器(222)請求變化來請求數據源(220)對數據項列表(226)做出這些變化。而且,數據源(220)可通過數據通知處理程序接口(232)告知項管理器數據項列表(226)的變化且項管理器(210)能通過元素通知處理程序接口(272)告知客戶端(260)數據表示項的列表(256)的變化。B.數據項管理器環境的細節
項管理器(210)可以是以標準語言和格式實施的模塊,例如實施在ECMAScript文本文
8件中。可替換地,項管理器的代碼可為一些其它格式,諸如動態連結庫的格式,或者項管理器可更密切地合併到應用本身內,諸如在靜態庫中。項管理器可為能重新使用的模塊。術語能重新使用指項管理器為能插入到各種不同環境中以與客戶端和數據源交互的模塊。在這樣的不同的環境中,客戶端和/或數據源可不同地配置,但項管理器仍能提供用於客戶端和數據源的接口。舉例而言,項管理器可包括於客戶端應用的代碼中,項管理器可為單獨於客戶端的組件但運行於與客戶端相同的過程中,項管理器可包括於這樣的環境中,其中項管理器以獨立於相應客戶端的過程而運行,等等。數據項(224)可為各種不同格式中的任何格式,且可當它們在環境(200)的組件內和/或環境(200)的組件之間傳遞時可翻譯。舉例而言,數據源適配器(222)可將數據項(224)轉換為ECMAScript對象,其可具有JSON(JavaScript對象表示法)可串行化的 ECMAScript對象為性質,其表示用作項密鑰的項數據和串(或其它數據結構)。每個這樣的密鑰可為對於數據項而言不改變的值,且其不同於數據源(220)中數據集中其它數據項的密鑰。舉例而言,密鑰可為由用於保持記錄的數據源(220)構成的密鑰或者它們可為識別符,諸如驅動器登記號、社會安全號等。對於這樣的密鑰表示敏感信息的情況,可採取適當安全措施,諸如加密技術來保護這些密鑰。這些密鑰能由項管理器用於保持記錄,諸如區分和/或匹配相對應的數據項和/或數據表示項。項再現器(240)可以各種形式之一實例化數據表示項(254),諸如HTML文檔對象模型(DOM)元素子樹的形式。I.數據源接口
數據源適配器(222)可為客戶側模塊,其與數據源(220)接口且向項管理器(210)提供數據源接口(230)。數據源接口(230)可在由項管理器(210)調用時實施由數據源適配器(222)執行的方法。在本文中將給出這些和其它方法的偽代碼的實例。應了解,命名慣例、方法的布置以及甚至圖2中模塊的總布置可以其它方式來實施。考慮到這一點,下面為這些方法之一的實例,itemsFromKey,以偽代碼示出用於調用該方法
void itemsFromKey(string key, Integer countBefore, Integer countAfter, function void itemsAvailable(
Array results,
Integer offset,
Integer count,
Integer index
在此方法中,請求由字符串「key」指示的數據項(224),以及在數據項列表(226)中的具有給定密鑰的數據項(224)之前的數據項(224)的數量(Integer countBefore)和具有給定密鑰的數據項(224)之後的數據項(224)的數量(Integer countAfter) 0因此,這限定了在所請求的列表中數據項(224)的範圍。但是,可允許數據源(220)返回比此範圍所示的更多或更少的數據項(224),可能在某約束內。舉例而言,數據源(220)可返回至少由給定密鑰所示的數據項(224)和之前的一項和之後的一項(如果Integer countBefore和 Integer countAfter各具有至少一的值)。如在上文的偽代碼中所示的那樣,itemsFromKey方法也傳遞被稱作itemsAvailable的回調函數,當來自數據源(220)的數據項(224)可用時,數據源適配器(222)可調用該函數。數據源適配器(222)可同步地或異步地調用itemsAvailable回調函數以取決於是否能同步返回數據項(224)而同步地或異步地返回數據項(224)。在調用此函數時,數據源適配器能在「結果」中包括一個或多個數據項(224)的陣列。在陣列「結果」中的數據項(224)能布置成與所包括的數據項在數據項列表(226)中相同的次序。在結果中的每個數據項(224)可以下面的形式包括密鑰和數據對象{key: 「…」, dataObject:…}。對itemsAvailable函數的調用也能指示由陣列「results (結果)」中的給定密鑰所示的數據項(224)的偏移(整數「offset (偏移)」)。舉例而言,如果在陣列「results」中具有給定密鑰的數據項(224)為在陣列中的第三項,那麼整數「offset」能具有值二。這能允許項管理器(210)將在結果內定位具有給定密鑰的數據項(224)。數據源適配器(222)也可包括在數據源(220)處的總數據項列表(226)中的數據項(224)數量的計數(整數「count」),如果這種計數為數據源(220)當前已知的且提供給數據源適配器(222)。數據源適配器(222)也可包括具有給定密鑰的數據項(224)的索引(整數 「index」),其能指示具有給定密鑰的數據項(224)在總數據項列表(226)中的位置或偏移。除了 itemsFromKey之外,數據源適配器(222)可實施其它方法,這些方法能通過數據源接口(230)調用以取回數據項(224)。這些其它方法可類似於itemsFromKey方法,但所示項可以其它方式指示。舉例而言,數據源適配器(222)可實施itemsFromEnd, 項管理器(210)可通過itemsFromEnd請求始於數據項列表(226)的結尾且往回計數規定計數(整數「count」)的數據項(224)的範圍,如由用於調用該方法的下面的偽代碼所 7]\ (移除了回調函數 itemsAvailable 的細節)「void itemsFromEnd (Integer count, function void itemsAvailable (···)) 」。作為另一實例,數據源適配器(222)可實施 itemsFromStart,項管理器(210)可通過itemsFromStart請求從數據項列表(226)開始且向前計數規定計數(整數「count」)的數據項(224)的範圍,如由用於調用該方法的下面的偽代碼所不(移除了回調函數 itemsAvailable 的細節)「void itemsFromStart (Integer count, function void itemsAvailable (…))」。作為又一實例,數據源適配器(222)可實施itemsFromlndex,項管理器(210)可通過itemsFromlndex請求在具有規定索引(由整數「index」所示)的數據項(224)之前(如由integer countBefore所示)和之後(如由integer countAfter所示)的數據項的範圍,如在用於調用該方法的下面的偽代碼中所不的那樣「void itemsFromlndex (Integer index, Integer countBefore, Integer countAfter, function void itemsAvailable (…))」。作為又一實例,數據源適配器(222) 可實施itemsFromPrefix,項管理器(210)可通過itemsFromPrefix請求在具有規定前綴或描述(由字符串「prefix」所示)的數據項(224)之前(如由integer countBefore所示) 和之後(如由integer countAfter所示)的數據項的範圍,如在用於調用該方法的下面的偽代石馬中所不的那樣「void itemsFromPrefix (string prefix, Integer countBefore, Integer countAfter, function void itemsAvailable (…)),,。數據源適配器(222)可實施所有這些方法,比所有這些方法少的方法。而且,數據源適配器(222)可實施其它方法,作為上文所討論的那些方法的補充或替代。舉例而言,環境(200)可被配置成使得數據源至少實施itemsFromlndex方法或itemsFromKey和 itemsFromStart 方法。
數據源(220)和數據源適配器(222)能被配置成在結果陣列中返回至少所請求的項(如果其存在)。範圍參數(integer count, integer countBefore 和 integer countAfter)能由數據源適配器(222)和數據源(220)構想為來自項管理器的提示,其將告知數據源(220)其試圖獲得什麼項。數據源(220)能在每種情況下自由返回更少或更多項。但是,如果範圍參數大於零,則數據源(220)和數據源適配器(222)能被配置成在由參數所指示的方向中返回至少一個附加項。當請求數據項列表(226)的一部分時,項管理器(210)能請求其已提取的數據項列表(226)中的相鄰區域的重疊部分。項管理器(210)能使用此重疊信息來提供「下一 / 前一」列舉給客戶端(260),即使在數據源(220)不支持索引的情況下。項管理器(210)也可使用該重疊信息來檢測數據項列表(226)的變化,其可提示項管理器(210)觸發刷新操作(在下文中更多地討論)。當數據項(224)的結果傳遞到項管理器(210)時,項管理器 (210)能驗證結果不與項管理器(210)以數據表示項的列表(256)的形式高速緩存的數據項列表(226)的部分衝突。舉例而言,如果項管理器(210)根據數據表示項的列表(256) 確定兩個數據項(224)相鄰(諸如用於這些項的數據表示項(254)在數據表示項的列表 (256)中相鄰的情況下),但兩個數據項(224)在結果陣列中並不相鄰,這可指示矛盾。相似地,如果數據項(224)的索引改變,這可指示矛盾。在矛盾的情況下,項管理器能開始刷新操作(在下文中更多地討論)以獲得數據的一致視圖,且能生成變化通知給客戶端(260)。 通過避免向客戶端(260)報告矛盾結果直到提取了用於解決該矛盾的足夠信息為止,項管理器能呈現數據項(224)的自相一致的表示,即使該表示可能在過期的時間。2.數據通知處理程序接口
數據源適配器(222)也可調用關於數據通知處理程序接口(232)的方法,其為數據源適配器(222)能通過其通知項管理器(210)數據項列表(226)變化(或者簡單地告知項管理器(210)某些事物變化使得能由項管理器(210)發起刷新操作)的接口。所有這樣的通知可為可選的(例如,許多web數據源並不提供這樣的通知)且能以某些其它方式維護一致性。舉例而言,客戶端(260)能周期性地告知項管理器(210) 「刷新」所有數據,項管理器(210)被實例化以觀察是否有任何事物變化,這將在下文中更多地討論。3.再現器接口
如上文所指出的那樣,項管理器(210)可調動項再現器(240)來將數據項(224)實例化為數據表示項(254),且項管理器(210)能調動佔位符再現器(242)來實例化佔位符
(255)。在一個實施方式中,項管理器(210)與再現器(240和242)之間的接口可由再現器 (240和242)來實現,其為能由項管理器(210)調用的函數。項再現器(240)能接受數據項 (224)且返回數據表示項(254),其可為用戶接口元素,諸如由更小用戶接口元素構成的樹的用戶接口元素。舉例而言,再現器(240或242)的輸出可為HTML字符串或DOM元素樹。 但能替代地使用其它用戶接口框架。舉例而言,除了用戶接口元素之外,再現器(240和/ 或242)中的一個或這兩個能產生再現的輸出。當調用佔位符再現器(242)來實例化佔位符(255)時,項管理器(210)可傳遞項的索引(或用於獲得項的索引的函數)到佔位符再現器(242)。但是,如果其為未知的,甚至可不傳遞索引。這是因為使用佔位符(255)代替數據表示項(254)直到能提取相對應的數據項(224)為止。因此,關於對應於佔位符(255)的數據項(224)已知很少(若有的話)信息。佔位符(255)能充當句柄,其表示在數據表示項的列表(256)中的真實的數據表示項(254)的位置。當數據表示項(254)可用時,項管理器(210)可向客戶端(260)傳遞到佔位符(255)和數據表示項(254)的指針,且能告知客戶端(260)利用適當數據表示項(254) 來替換佔位符(255)。當項管理器(210)從數據源(220)請求數據時,項管理器(210)能檢測數據源(220)是否同步(即,與重入調用一起)返回結果,且若如此,項管理器(210)能避免創建佔位符(255),因為能同步返回實際數據表示項(254)。4.項管理器接口
項管理器接口(270)能向客戶端(260)提供數據表示項的列表(256)的列舉,其表示在數據源(220)的數據項列表(226)的至少一部分。該列舉可為同步的,即使數據源(220) 並不同步響應,因為客戶端實際上列舉數據表示項的列表(256)。列舉能始於數據項列表 (226)的開始或結尾(即,數據表示項的列表(256)表示數據項列表(226)的開始或結尾處點)或者在某些其它位置,諸如具有給定索引或密鑰的數據表示項(254)。項管理器接口(270)的列舉方法能返回數據表示項且某些能接受數據項(224) 的識別符或數據表示項(254)作為參數。下文為用於調用從數據表示項的列表(256)返回特定數據表示項的方法的偽代碼的某些實例(其中的每一個表示在數據項列表(226) 中的數據項(224)) iiElement previousltem(Element item) 」,其返回表示在規定的數據表示「item」之前緊鄰的數據項(224)的數據表示項(254) ,Element firstltemO」, 其返回表示數據項列表(226)中第一數據項(224)的數據表示項(254) ;「Element nextltem(Element item) 」,其返回表示數據項列表(226)中的規定項之後的下一項的數據項(224)的數據表示項(254) ,Element IastItemO 」,其返回表示數據項列表(226)中最後數據項(224)的數據表示項(254) ,Element itemFromKey(string key)」,其返回表示具有特定密鑰的數據項(224)的數據表示項(254) ,Element itemFromPrefix(string prefix)」,其返回表示具有特定前綴或描述的數據項(224)的數據表示項(254);以及, 「Element itemAtlndex (Integer index) 」,其返回表示具有特定索引的數據項(224)的數據表不項(254) ο對於這些方法中的每一個,所返回的項可為佔位符(255)或數據表示項(254),取決於數據是否在調用時可用(例如,如果項再現器(240)已經被調用來用於該項,則可返回來自該調用的數據表示項(254)。將在下文中更詳細地討論佔位符(255)的使用。5.元素通知處理程序接口和刷新操作
數據表示項(254)(或佔位符(255))僅能用於表示數據項(224),只要數據表示項
(254)由項管理器(210)識別為如此。因此,可告知客戶端(260)數據表示項的列表(256) 的這些變化。舉例而言,如果佔位符(255)響應於調用列舉方法由項管理器(210)返回到客戶端(260),且現所請求的數據表示項(254)可用(且已提取其所需的所有資源,如下文所討論的那樣),該方法能通過元素通知處理程序接口(272)調用以告知客戶端(260)。下面為這種調用的偽代碼的實例「void itemAvailable (Element item, Element placeholder) 」,其中「item」為數據表示項(254)(其可為到數據表示項的列表
(256)中的數據表示項(254)的指針),且「佔位符」為由數據表示項的列表(256)中的數據表示項(254)(其也可為到佔位符(255)的指針)替換。應當指出的是,這是單獨於上文所討論的itemsAvailable的方法。在數據表示項(254)和佔位符(255)為用戶接口元素的情況下,元素通知處理程序接口(272)能用傳入的數據表示項(254)來替換用戶接口中的佔位符(255)。從這點開始,佔位符(255)不能由項管理器(210)識別為有效項參數。當更新數據表示項時,項管理器(210)可發起刷新操作,刷新操作能生成變化通知集。為了開始刷新操作,能由項管理器(210)提取數據源(220)中的更新的數據集的更新表示。能通過比較更新表示與原始表示來生成變化通知集。變化通知集能表示得到始於原始表示的更新表示的可能變化集。可能的變化集可包括比替代變化集更少的變化,替代變化集將例如表示刪除原始數據集中的所有項且在更新的數據集中插入所有項。變化通知集能經由元素通知處理程序接口(272)發送到客戶端(260)。項管理器(210)能向客戶端(260)呈現接口,該接口的表現如同數據源(220)提供同步變化通知,無論數據源(220)是否實際如此。這可以以將由項管理器(210)執行的三個主要步驟進行與數據源(220)中的數據項列表(226)相比,檢測到當前本地數據表示 (250)過期,提取呈數據表示項(254)形式的更新表示來替換本地數據表示(250)的全部或部分,以及比較更新的本地數據表示(250)的原始版本和更新版本來生成變化通知。這些的每一個將在下文中討論。a)檢測過期本地數據表示
如果例如由客戶端(260)請求刷新操作(即,提取呈數據表示項(254)形式的更新表示來替換所有或部分本地數據表示(250),且比較更新的本地數據表示(250)的原始版本和更新版本以生成變化通知),則可繞開對本地數據表示(250)是否過期的檢測。客戶端 (260)能經由項管理器接口(270)請求刷新操作,例如通過調用方法(例如,通過調用「void refreshO」)。舉例而言,客戶端(260)可被配置成周期性地請求刷新操作或者可由用戶輸入來請求刷新操作。此外,項管理器(210)或適配器(222)能自主發起刷新操作,例如當項管理器(210)或適配器(222)已檢測到本地數據表示(250)過期時。舉例而言,當客戶端(260)請求附加數據表示項(254)時可檢測到過期本地數據表示(250)。項管理器(210)可請求已經提取的本地數據表示(250)的重疊部分,作為請求由客戶端(260)所請求的新數據項(224)的補充。項管理器(210)能在數據項批(224) 從數據源(220)到達時處理數據項批(224)。每次批到達時,項管理器(210)能比較與表示先前返回的數據項(224)的數據表示項(254)的重疊(若有的話)來檢查一致性。舉例而言,如果數據表示項K先前在項J之後,那麼現在其在項H之後,那麼某些事物變化,甚至客戶端最近的請求僅為項K。如果對列表中的數據項(224)提供索引,那麼數據項索引中的變化也可指示對數據項列表(226)中一個或多個其它數據項(224)的變化。項管理器(210)可以試圖確定什麼有變化且提取被確定為變化的新數據的子集。 可替換地,能由項管理器(210)來重新提取在本地數據表示(250)(其可為客戶端(260)當前維護句柄到的所有數據表示項(254))中的所有數據表示項(254)。下文為此提取的討論。b)提取更新的數據表示
當提取更新的數據表示為刷新操作的部分時,項管理器(210)可進入不同操作模式。 以此方式,項管理器(210)能忽略由於進入此模式之前發送的請求而到達的數據項(224)。 此外,雖然在此模式,項管理器(210)可與數據源(220)通信以提取數據批直到項管理器 (210)具有一致的「快照」為止,即,對應於原始本地數據表示(250)(即,已可用於項管理器(210)的本地數據表示)的數據源(220)中的數據部分的完整的更新的本地數據表示 (250)。能由項管理器(210)使用各種試探法來獲得這種快照。在一個實施方式中,其可用於數據表示項的列表,可以進行以儘可能少的請求來重新獲得實例化的子列表的嘗試,且項管理器(210)能檢查結果的每批請求以查看哪些仍需請求。在此方案中,如果對原始本地數據表示(250)中的數據表示項(254)的請求失敗,則可認為該具體項被刪除,但在發生這種失敗之前或者該數據表示項(254)被成功地再提取,該項可認為是在刷新操作中仍待提取的項。如果項管理器(210)找到所接收的數據項(224)批之間的矛盾,則提取過程能重新開始且能再次請求在本地數據表示(250)中所有數據表示項(254)的數據項(224)。舉例而言,如果在發送不同批的時間之間數據在數據源(220)中變化,可發生這種情況。雖然項管理器(210)處於其刷新模式,其能中止從數據源(220)請求新數據項 (224)。但是,項管理器(210)能通過響應於請求返回佔位符(255)而繼續處理來自客戶端 (260)的請求。可替換地,如果這些請求的履行在執行刷新操作的過程中構成重要因素,則項管理器(210)可完成某些客戶端請求。c)比較表示和生成變化通知
生成變化通知可以各種方式中的任何方式來進行。舉例而言,變化通知集可表示在原始本地數據表示(250)中刪除所有數據表示項(254)且將所有數據表示項(254)插入於更新的本地數據表示(250)中。但是這種變化通知集可不向客戶端(260)提供足夠的信息來以有幫助的方式向用戶傳達變化。可替換地,項管理器(210)能生成變化通知集,其表示似乎合理的變化集,即使數據源(220)中數據集變化的真實序列是項管理器(210)未知的。這可由項管理器(210)使用能減少由變化通知所表示的變化量的技術來進行,從而變化量小於其它可能的變化集, 例如如果變化包括在原始本地數據表示(250)中刪除所有數據表示項(254)和將所有數據表示項(254)插入於更新的本地數據表示(250)中。客戶端(260)能使用這種變化通知集來以各種方式向用戶傳達變化。舉例而言,客戶端(260)可提供動畫來強調這些變化。此外,客戶端(260)能以其它方式來傳達變化。舉例而言,如果發生於屏幕頂部顯示的項示出數據表示項的列表(254)移動到數據源(220)中數據集的另一部分,那麼客戶端能讓可見窗口滾動到其原始位置(且示出所有隨後的數據表示項(254)),而不是使得窗口滾動剛好保持一項在屏眷頂部。下文為項管理器(210)能用於生成變化通知的技術的一種實施方式的描述。總之,此技術能逐漸地更改原始本地數據表示(250)直到其匹配更新的本地數據表示(250)。 此技術將參看圖3來描述,其示出原始本地數據表示(310)的一部分的特定實例,所接收的在刷新操作中提取的更新數據項(320)和在已運行列表生成技術之後所得到的更新的本地數據表示(330)的部分。在圖3中,項以其次序在表示中列出,其也可為項索引的次序,如所圖示的那樣。 在圖3中,帶問號的三角形示出佔位符,帶大寫字母的三角形示出由客戶端請求且實例化 (例如,再現為發送到客戶端的Π描述)的數據表示項,且帶字母的方框示出從數據源返回但未由客戶端請求且仍未實例化的數據表示項。在問號或大些字母下方的數字指示在數據源中總數據集中的項的索引號。此外,大寫字母能表示數據表示項的密鑰。
原始數據表示(310)被圖示為包括帶索引85和86的兩個佔位符(表示由客戶端請求但未由項管理器返回的項),之後為具有相應索引87、88、89和90的實例化數據表示項 D、E、F和G,且然後為具有相應索引91和92的未請求的數據項H和J。所接收的更新數據項(320)包括帶相應索引86、87、88、89、90和91的項C、D、Q、G、E和R0能比較所接收的更新數據項(320)與原始本地數據表示(310)以生成將發送到客戶端的變化通知。現將描述用於生成這些變化通知的技術。在該技術中,能找到在原始本地數據表示(310)中出現但未在接收的更新數據項 (320)中出現的項。對於這樣的項能發送移除型變化通知且能移除這些項。舉例而言,項 F的移除型通知能發送給客戶端且項F能從本地數據表示移除。在此操作期間,可以限制對客戶端的訪問使得不允許客戶端觀察項上的索引,因為這樣的索引可能不一致。可替換地,當做出可影響索引的其它變化時,如果索引變化且客戶端被告知索引變化,則可允許客戶端看到這樣的索引。作為又一替代,可允許客戶端觀察索引,即使索引是不一致的。該技術還可包括找到由索引請求的針對項生成的佔位符且使那些佔位符與那些項匹配。舉例而言,如果在原始本地數據表示中帶索引85和86的佔位符由索引請求,則這將包括使原始本地數據表示(310)中具有索引86的佔位符與所接收的更新數據項(320) 中具有索引86的項C匹配。這能在移動數據表示中的佔位符之前進行,以防止由索引請求的項的佔位符移動,因為這種索引請求的佔位符的移動能導致佔位符與具有除所請求的索引之外的索引的項匹配。雖然在圖3中未圖示,所接收的更新數據項(320)可在多個非鄰接範圍上鋪展。舉例而言,由於可允許客戶端保持到非鄰接範圍的句柄而發生這種情況,因此原始本地數據表示(310)可包括由客戶端所請求的表示項的多個非鄰接範圍。此外,項管理器可僅請求在原始本地數據表示(310)中每個項周圍有限的範圍。該技術可包括確定所接收的更新數據項中每個範圍的匹配。舉例而言,匹配可包括在原始本地數據表示(310)中的範圍,其與所接收的更新數據項(320)中的匹配範圍共享最多的個別項。在某些情況下,在原始本地數據表示(310)中的範圍可合併,如果合併的範圍映射在所接收的更新的數據項(320)中的範圍。在所接收的更新的數據項(320)中,能標記出每個範圍的邊界,在該邊界外部所有項不出現在原始本地數據表示(310)中。舉例而言,此可包括標記在所接收的更新數據項(320)中在項E與R之間和項C與D之間的邊界。這些邊界能區分簡單看起來尚未觀察到的項(例如,項C與R)與已插入到數據源中的數據集中的項(例如,項Q)。關於在所接收的更新的數據項(320)的每個範圍中出現的項和其在原始本地數據表示中的匹配範圍,能識別無需相對於彼此移動的項集且將其標記為靜止的。這可進行使得這樣的靜止項的數量增加且因此能減小移動型變化通知的數量。例如,對於列表,此可包括分配序數給原始本地數據表示(310)中的項,且然後在所接收的更新的數據項集中找到這些序數中「最長的有序子序列」。舉例而言,此可使用已知的「耐心分類(patience sorting)」技術的一部分來進行。在圖3的圖示實例中,此可導致識別D和G為靜止的,其中G和G形成最長有序子序列。(或者,該技術能識別D和E為靜止的,具有相同大小的有序子序列)。如果在上文所討論的標記邊界內存在佔位符,則能基於在兩個數據集中出現的近鄰來嘗試匹配這些佔位符與在原始本地數據表示(310)中未出現的所接收的更新數據項 (320)中的項。舉例而言,如果具有索引86的佔位符並未已由於匹配索引值而與項C匹配, 則該佔位符能與項C匹配,因為項C和佔位符具有相同近鄰(項D)。該技術可包括針對在所接收的更新數據項(320)和原始本地數據表示(310)中非靜止的項發送移動型變化通知。該移動能在本地數據表示中執行。舉例而言,此可包括發送項E的移動型通知且將項E移動到本地數據表示中的項G之後。當生成並發送這些通知時,能限制客戶端的存取。舉例而言,可允許客戶端觀察項的近鄰,而不是項的索引。該技術還可包括找到在所接收的更新的數據項(320)中出現的新項,而不是原始本地數據表示(310)。這些新項能添加到本地數據表示且相對應的插入型變化通知能被發送到客戶端。舉例而言,在圖3中,項Q能插入於項D之後且插入型變化通知能發送到客戶端。如同移動,當執行插入時能限制客戶端訪問。舉例而言,可允許客戶端觀察任何項的近鄰,而不是項的索引。此外,該技術能包括比較出現於原始本地數據表示(310)和更新的本地數據表示 (330)中的項內容。對於內容已變化的項,這些項能在本地數據表示中更新且變化型變化通知能發送到客戶端。同樣,在此操作期間能限制客戶端的訪問使得能由客戶端觀察到除了索引之外的任何事物。該技術還可識別在原始本地數據表示(310)和更新的數據表示(330)中出現的索引已經變化的項。舉例而言,在圖3的實例中,能改變項E和G的索引且索引變化型變化通知能發送到客戶端。在此操作期間,能限制客戶端訪問使得其能觀察到變化項的新索引和舊索引,而不是其它索引。該技術也可包括匹配佔位符,這些佔位符尚未與項匹配且在所接收的更新數據項 (320)的標記的邊界外部的項的原始本地數據表示(310)中的範圍外圍上。能基於它們所匹配的項或者其對於實例化的項或其它佔位符的鄰近性來更新來自原始本地數據表示 (310)的佔位符的索引。在進行此操作之後,能移除對客戶端訪問的限制,且能允許客戶端以客戶端常用方式訪問本地數據表示。與所接收的更新數據項(320)中的項匹配的佔位符能利用在本地數據表示中的匹配項而實例化且能發送「item available (項可用)」通知。此外,如果在數據源中的數據集中的總項計數變化(根據關於從數據源發送到項管理器的總計數的信息或者數據源返回數據源列表中的最後數據項),那麼計數變化型變化通知能發送到客戶端以指示此變化。在圖3的實例中,上文所討論的刷新技術的操作能導致在圖3頂部的原始本地數據表示(310)更新為在圖3底部所圖示的更新的本地數據表示(330),且變化通知適當地發送給客戶端。可使用其它技術來以其它方式進行此操作,這些其它方式對於在該時間發送變化通知是符合邏輯的。舉例而言在上文所討論的技術中的操作次序能改變,只要它們仍導致可由客戶端適當地處理的變化通知的有序生成。在完成了刷新操作之後,可重新開始對本地數據表示中仍存在佔位符的請求的項的提取。這樣的佔位符可存在於原始本地數據表示(310)中和/或它們已在上文所討論的刷新技術期間由於客戶端對數據的請求而被插入。舉例而言,在圖3的實例中,此可導致提取對應於更新的本地數據表示(330)中佔位符的項。因此,能適當地提取項,即使忽略刷新操作之前起始的對數據源請求的結果,以簡化保持本地數據表示在刷新技術結束時一致。
6.列表編輯器接口和優化編輯
返回參看圖2,如果數據源(220)和數據源適配器(222)實施一個或多個編輯方法,則能支持編輯。項管理器能覆蓋這些方法中的每一個,因此,項管理器(210)能同步更新數據表示項的列表(256),由此允許同步地更新客戶端(260)的用戶接口,即使數據源(220)異步地執行由客戶端(260)請求的更新。這些對數據表示項的列表的「優化」更新將通常為正確的(如果且當所請求的編輯在數據源(220)成功時優化更新將為正確的),且數據源 (220)能在後來的某時間悄悄更新數據項列表(226)而不需要對數據表示項的列表(256) 的進一步更新或對終端用戶的視覺反饋。如果對數據項列表(226)的更新失敗,那麼項管理器(210)能向客戶端(260)報告錯誤且恢復數據表示項的列表(256)以反映數據項列表(226)的實際狀態。舉例而言,這可包括撤銷對數據表示項的列表(256)已做出的更新且告知客戶端(260)更新已被撤銷。 舉例而言,項管理器(210)可告知客戶端(260)所請求的更新不再有意義(如果其不再有意義,例如,由於另一用戶對數據項列表(226)做出變化)或者不允許該更新(例如,因為正確許可並未準備好進行更新),且可撤銷尚未做出的任何更新。但是,如果刪除失敗,項管理器(210)可不對齊更新隊列,因為無論如何,另外的編輯通常並不指刪除的項。而且,項管理器(210)可不撤銷對「不再有意義的」失敗的刪除,因為無論如何,這種失敗將指示已經刪除了該項。在某些情況下,當更新數據項列表(226)的請求未決時,數據源(220)可變得不可用。在這樣的情形下,項管理器(210)能保持已對數據表示項的列表(256)做出的優化更新,因為那些更新將仍可由數據源(220)來執行。但是,項管理器(210)可告知客戶端(260) 數據源(220)是不可用的。在這樣的情形下,客戶端(260)可比通常情況更頻繁請求刷新操作且可能不允許進一步編輯。應當指出,如果所請求的更新並不由數據源(220)執行,當執行下一刷新操作時,能使得本地數據表示項的列表(256)按照該數據項列表(226)。此外, 如果由客戶端(260)所請求的更新中的某些在刷新操作之後不再有意義,那麼當進行刷新操作時可由項管理器(210)告知客戶端(260)。數據源適配器(222)能確定對於不再有意義的更新、不允許的更新和數據源不可用的情況何時發布代碼。數據源適配器(222)能發送這些代碼到項管理器(210)且項管理器能發送它們到客戶端(260)。7.提取數據表示項的資源
在諸如HTML平臺的某些配置中,項管理器(210)可依賴web瀏覽器機構來提取用於數據表示項(254)的資源(例如,用於數據表示項的圖像等)。舉例而言,該資源可包括與特定 HTML 標籤相關聯的資源,諸如 ,〈iframe src= 「 [URL],,>,〈script src= 「[URL]」 >,〈input type= 「image」 src= 「[URL]」 >,〈video poster= 「[URL]」 > 和 〈object data= 「[URL] 」>,其中「[URL]」指該資源的均勻資源定位器。當數據表示項(254) 由項再現器(240)再現為DOM樹時,在DOM樹內參考的這些資源能進入到瀏覽器的提取隊列內。如果客戶端(260)向下滾動很多頁,但當前在顯示屏幕上可見的資源能首先提取,而不是等待於該隊列後面。為了繞開在這樣的情形中的瀏覽器邏輯,項管理器(210)能拖延調用項再現器(240)來再現數據表示項(254)直到資源隊列僅具有條目的閾值數為止。舉例而言,如果瀏覽器允許六個同時的連接,六可用作閾值。項管理器(210)能創建需要資源的用戶接口元素的暫時副本且能將上傳句柄附到這些元素上,因此項管理器(210)能知道何時已成功地提取資源。項管理器(210)能確定接下來再現哪個項(和因此提取該項的資源)。這種確定能使用項管理器(210)的內部邏輯且能依靠來自客戶端(260)的優先級信息。舉例而言, 客戶端(260)能調用告知項管理器(210)哪些項是「高優先級」(諸如屏幕上的那些)和 「中優先級」(諸如剛好在屏幕下的那些)的方法,且項管理器(210)能假定其它項為「低優先級」。項管理器(210)能調動項再現器(240)以從最高到最低的此優先級次序來再現這些項。作為實例,控制(264)能通過項管理器接口(270)來調用方法,諸如通過做出能由以下偽代碼表不的調用「void prioritize (Element first, Element last, Priority priority) 」,其中「Element first」和「Element last」為在項範圍中的第一項和最後項, 且「Priority priority」指示該範圍的優先級。8.數據表示項的返回佔位符
如在上文中簡要地討論的那樣,如果客戶端(260)向項管理器(210)發送項管理器 (210)尚未從數據源(220)取回的項表示的請求,那麼項管理器(210)能向客戶端(260)返回佔位符(255)直到項管理器(210)從數據源(220)成功地提取了相對應數據項(224)為止。項管理器(210)也可包括在本地數據表示(250)中的佔位符(255),其中佔位符(255) 能用於保持記錄目的,諸如當相對應的數據項(224)從數據源(220)返回時與相對應的數據表示項(254)匹配。此外,客戶端(260)可使用佔位符(255)用於各種目的,諸如保持記錄和代替實際數據表示項(254)顯示直到返回了數據表示項(254)為止。在一個實施方式中,項管理器(210)能向客戶端(260)暴露項管理器接口(270), 項管理器接口(270)能允許響應於來自客戶端(260)的不同類型的請求以各種方式提取個別數據表示項(254),如上文所討論的那樣。如上文所討論的那樣,響應於對這些請求的方法中每一個的調用,項管理器(210)能作為項再現器(240)所生成的用戶接口元素而返回所請求的數據表示項(254)。當調用這些項請求方法之一時,項管理器(210)能首先檢查以確定項管理器 (210)是否已經具有在本地數據表示(250)中高速緩存的給定項的數據,其可在存儲器中。 若如此,項管理器(210)可已調用項再現器(240),在此情況下,項管理器(210)能再次作為數據表示項(254)返回相同的用戶接口元素,否則項管理器(210)能立即調用項再現器 (240)且返回實例化(例如,再現為能發送給客戶端的Π描述)項給客戶端(260)作為數據表不項(254) ο否則,項管理器(210)能在適配器(222)上調用適當方法,向適配器(222)傳遞適配器(222)能同步地或異步地調用的回調函數以返回所請求的數據項(224),如上文所討論的那樣。數據源(220)能快速地返回數據項(224)(諸如在數據源(220)為本地數據源的情況下)使得適配器(222)可以通過立即調回到項管理器(210)內(即通過同步地調用回調函數)而同步地報告所得到的數據項(224)。項管理器(210)能檢測到何時發生這種同步回調。舉例而言,項管理器(210)傳遞到適配器的回調能在為該項創建的隙數據結構中存儲數據表示項(254)。如上文所討論的那樣,項管理器(210)能執行調用函數以調用到適配器內。在執行了調用函數之後,項管理器(210)可檢查隙數據結構以查看數據表示項(254)或數據項(224)是否存儲於那裡。 若否,那麼項管理器(210)能知道請求將異步完成且能創建佔位符(255)。關於項的每個請求可再次做出這種確定或者可僅對於特定數據源(220)做出一次或僅周期性地做出確定。 可替換地,適配器(222)和/或數據源(220)可告知項管理器(210)數據源(220)是否能同步返回項。對數據源(220)或數據項組(224)的這種總體確定能認為是對於應用該確定的每個數據項(224)的確定。如果回調函數已同步回調,則項管理器(210)能調用項再現器(240)且向客戶端 (260)返回實例化項作為數據表示項(254)。這可在不生成或提供佔位符(255)的情況下進行。如果項管理器(210)並非已接收了所請求的數據項(224),且所請求的數據項將不同步返回,那麼可使用異步調用來提取數據項(224)。為了避免對相同數據項(224)的冗餘調用,當發起數據提取時,可以生成該提取的識別符且將其添加到散列表。預期由特定提取返回的數據項(224)的佔位符(255)能添加到本地數據表示(250)中的隙且用此提取識別符標記。當提取完成時,無論成功還是失敗,能從散列表移除其識別符。因此,當客戶端(260)從異步返回相對應數據項(224)的數據源(220)請求尚未實例化的數據表示項(254)時,可存在至少三種子情況。首先,客戶端(260)可已經請求了數據表示項(254),在此情況下,對於該項可已經存在佔位符(255)且能返回該佔位符 (255)。其次,客戶端(260)能第一次請求數據表示項(254)且來自客戶端(260)的請求能發起對數據源(220)的異步請求,也可生成新佔位符(255)並返回。第三,客戶端(260)能第一次請求數據表示項(254),但請求可使得相對應的請求不被發送到數據源(220)直到履行了對數據源(220)之前的請求(例如,項管理器(210)將提取在給定項之後相對應數據項(224),但該項本身仍僅為佔位符(255));能創建並返回新佔位符(255)並返回,且能等待提取發起直到適當時間為止。當數據項(224)從數據源(220)到達時,項管理器(210)能匹配數據項(224)與佔位符且調用項再現器(240)用於現可實例化的任何數據項(224)。對於每個實例化,項管理器(210)可發送itemAvailable通知給客戶端(260),向客戶端(260)傳遞對現有用戶接口元素的參考(佔位符(255))和替換用戶接口元素(數據表示項(254))。客戶端(260) 能通過用數據表示項(254)替換佔位符(255)來做出響應。這種替換能導致客戶端(260) 用數據表示項(254)的呈現(例如顯示)來替換佔位符(255)的呈現(例如,顯示)。項管理器(210)也可檢驗從數據源(220)接收回的結果鄰近的佔位符(255)且如果這些項尚未被請求,能發起相對應數據項(224)的新提取。項管理器(210)能試圖減少到數據源(220)的網絡往返次數,因此項管理器(210) 能計數相鄰佔位符(255)且分批請求數據項(224)。因此,來自項管理器(210)的一個請求可請求在來自客戶端(260)的多個請求中所請求的數據項(224)。如果從數據源(220)接收回的數據項集(224)延伸超過當前佔位符集(255),那麼額外數據項(224)能存儲於本地數據表示(250)中的隙中使得某些另外的請求可與表示那些高速緩衝的數據項(224)的數據表示項(254)同步履行。可允許數據源(220)返回比項管理器(210)所請求的更多或更少的項。上文所述的方案可允許這種情況,但可能由項管理器(210)發起某些不必要的提取。為了減少這種可能性,項管理器(210)可通常在進行下一請求之前等待返回自一個請求的數據項(224)。 這也可允許更多的數據項(224)由其密鑰請求,而不是以其它方式,諸如僅以索引方式請求。舉例而言,項管理器(210)可以此方式等待,只要請求是針對相鄰的數據項(224)(且以某種方式來確定緊鄰,諸如由返回的數據項陣列中的數據項(224)的相對定位)。在此情況下,例如,如果項管理器(210)接收密鑰為「A」的數據項(224),那麼項管理器(210)可請求密鑰為「A」的數據項(以提供請求的某種重疊以例如檢測是否在請求之間對數據源(220) 中的數據已做出變化)和下10個項。但項管理器(210)可選擇不等待,如果一個請求和它後面的下一個請求正請求並不彼此相鄰的數據項(224),因為然後對第一請求的響應將不可能包括將在下一請求中請求的數據項(224)。在某些情況下,客戶端(260)和項管理器(210)可不知道在數據源(220)的數據集中的數據項總數。並非需要終端用戶在顯示任何佔位符(255)之前等待網絡往返來確定數據延伸,項管理器能「推測地」返回佔位符(255)。換言之,項管理器(210)能返回這樣的佔位符(255),在確立計數之前,推測在數據源(220)的數據集中的項數量大於客戶端(260)將請求的數量。在此推測證明是錯誤的情況下,可移除某些佔位符(255),因為它們並不實際上對應於數據項(224)。項管理器(210)可向客戶端(260)發送與在項實際上從數據集刪除情況下項管理器(210)將發送的相同的「移除」通知。但是,為了給予客戶端(260)顯示此情形的不同動畫的選項(例如,微微淡出而不是引人注目的飛走效果),可伴隨該通知傳遞附加布爾參數(例如,名稱為「幻想」的參數)。這種幻想參數可向客戶端 (260)指示就項管理器(210)做出的確定而言,並不存在對應於相關聯的佔位符(255)的數據項(224)。這種幻想布爾可適用於其它情境,諸如當數據項(224)的兩個非鄰接的區域實例化為數據表示項(254)且擴展直到區域「衝突」為止,但在區域之間創建了太多佔位符
(255)。通過組合項管理器(210)的佔位符特徵與佔位符再現器(242)和項再現器(240) 的數據模板特徵,能簡化在客戶端(260)與項管理器(210)之間的編程接口,因為客戶端 (260)和項管理器(210)能操作,而無需單獨句柄來跟蹤身份。替代地,項管理器(210)能向客戶端(260)傳遞對佔位符(255)的參考和對所請求的數據表示項(254)的參考,指示客戶端(260)用數據表示項(254)(例如,利用itemAvailable通知)來替換佔位符(255)。 客戶端(260)能在客戶端(260)的用戶接口數據結構(例如,DOM樹)中的適當位置無條件地插入由調用請求方法之一返回的值(數據表示項(254)和/或佔位符(255))且隨後在由項管理器(210)通知這樣做時換出任何佔位符(255)。因此,客戶端(260)能與項管理器(210)交互,如同客戶端(260)與同步數據源交互,無論實際數據源(220)能否對數據請求提供同步響應。在替代設計中,項管理器(210)(而不是客戶端(260))能維護用戶接口數據結構。 舉例而言,在用戶接口數據結構為DOM樹的情況下,客戶端(260)能接收數據表示項(254) 作為DOM元素且能假定DOM元素具有對應於DOM元素下方完整列表中的項的子級。客戶端 (260)能使用項管理器(210)而不是DOM接口來從一個子級導航到下一個子級。項管理器 (210)可包括佔位符(255)且能用DOM樹本身中的數據表示項(254)來替換它們。以此方式,項管理器(210)能沿著子級前後導航,且能用佔位符(255)且在隨後數據表示項(254) 變得可用時用數據表示項(254)更新子級。環境(200)也可包括用於保持記錄的一個或多個數據結構,諸如用於跟蹤在數據表示項(254)的列表中一個或多個位置的數據結構。III.數據項管理器技術現將討論若干數據項管理器。這些技術中每一個能在計算環境中執行。舉例而言,每個技術可在計算機系統中執行,計算機系統包括至少一個處理器和至少一個存儲器,存儲器包括存儲於其上的指令,這些指令當由至少一個處理器執行時執行技術(一個或多個存儲器存儲指令(例如,對象代碼)且當處理器(一個或多個)執行那些指令時,處理器(一個或多個)執行技術)。相似地,一個或多個計算機可讀存儲介質可具有實施於其上的計算機可執行的指令,其當由至少一個處理器執行時造成至少一個處理器執行該技術。參看圖4,將描述數據項管理器技術。在該技術中,項管理器能經由數據源適配器從數據源請求(410)數據項且能經由數據源適配器從數據源接收回(420)數據項。此外, 項管理器能維護(430)表示從數據源接收的表示數據項的數據表示項的列表且能向客戶端提供(440)貫穿數據表示項的列表的列舉。數據表示項可為用戶接口元素,且維護(430)數據表示項的列表還可包括調動再現器來再現來自從數據源接收的數據項的用戶接口元素。維護(430)列表還可包括在該列表中包括用戶接口元素。向客戶端提供(440)貫穿該列表的列舉包括對於數據表示項中的至少一個,請求用於數據表示項的資源,等待資源加載,且在資源加載之後向客戶端提供數據表示項。維護(430)數據表示項的列表還可包括從客戶端接收數據表示項中一個或多個的一個或多個優先級指定,且以由優先級指定(一個或多個)規定的順序加載數據表示項的列表的資源。維護(430)數據表示列表可包括使得該列表中數據表示項狀態脫水。舉例而言, 可響應於用戶輸入做出狀態變化,其能通過存儲於特定位置,諸如存儲於存儲器和/或長期存儲設備中而脫水。該狀態能表示數據表示項的變化,諸如響應於用戶輸入的變化。項管理器能從列表移除數據表示(例如,通過刪除該表示和/或從存儲器移除整個列表)且能在後來將數據表示項重新插回到列表內。項管理器能將該狀態再水合回到數據表示項內。 這可在數據表示項重新插入到列表內之前或之後進行。以此方式,能維護對數據表示項的變化。舉例而言,可維護響應於用戶輸入對數據表示做出的用戶接口變化,即使在從數據表示項的列表刪除數據表示項且隨後再插入到數據表示項的列表中的情況下。水合可允許以降低的存儲成本來維護用戶輸入變化,因為能丟棄用戶接口數據結構的方面,且如果它們隨後使用,能重新創建那些方面。此外,水合可允許將狀態轉變成能序列化用於長期存儲的形式,諸如不包括指針的形式,指針僅在存儲器中用戶接口數據結構當前形式中有意義。項管理器可通過第一接口與客戶端交互,且可通過第二接口與數據源適配器交互。項管理器也可分別通過第三接口和第四接口與項再現器和佔位符再現器交互。項管理器可從數據源異步接收(420)數據項且向客戶端提供(440)貫穿數據表示項的列表的列舉可包括向客戶端提供貫穿數據表示項的列表的同步列舉。舉例而言,向客戶端提供此同步列舉可包括向客戶端提供一個或多個佔位符,同時等待對應於佔位符(一個或多個)的一個或多個數據表示項變得對於項管理器可用。此外,向客戶端提供同步列舉可包括當對應於佔位符(一個或多個)的數據表示項(一個或多個)變得可用時,將這些數據表示項(一個或多個)提供給客戶端且指示客戶端用數據表示項(一個或多個)來替換佔位符(一個或多個)。圖4的技術還可包括項管理器向客戶端提供(450)數據表示項的列表的變化通知。項管理器也可通過比較包括一個或多個數據表示項的第一數據表示與包括一個或多個數據表示項的第二數據表示來生成變化通知。維護(430)數據表示項的列表可包括從客戶端接收一個或多個請求集以對數據表示項的列表做出一個或多個編輯。項管理器可發送請求(一個或多個)到數據源以對由數據表示項所表示的數據項列表做出編輯(一個或多個)。項管理器能對數據表示項的列表做出編輯(一個或多個)且通知客戶端已做出編輯(一個或多個),而無需等待數據源對請求 (一個或多個)做出響應。如果數據源完成了對數據項列表的編輯(一個或多個),則能保持對數據表示項的列表的編輯。如果數據源對數據項列表的編輯失敗,能撤銷對數據表示項的列表的編輯。維護(430)數據表示項的列表可包括從數據源請求多個數據項且響應地從數據源接收回不同數量的數據項(多於或少於所請求的數量)。項管理器也可利用表示從數據源接收回的不同數量的數據項的數據表示項來更新數據表示項的列表。維護(430)數據表示項的列表可包括從數據源處的數據項列表請求數據項子集, 其中子集彼此重疊。項管理器能使用選自由數據項索引、數據項密鑰和數據項索引和數據項密鑰組合構成的識別符來識別從數據源請求的項。數據表示項的列表可表示在數據源處數據項列表的一部分。維護(430)數據表示項的列表可包括在數據表示項由客戶端請求時從數據項列表提取附加的數據項且釋放不再由客戶端使用的數據表示項。圖4的技術還可包括項管理器向客戶端提供(460)在數據源處的數據項列表的項計數。參看圖5,將描述另一數據項管理器技術。該技術可包括項管理器經由數據源適配器從數據源請求(510)數據項且經由數據源適配器從數據源接收回(520)數據項。數據項管理器可維護(530)表示從數據源接收的數據表示項的列表,其中數據表示項包括用戶接口元素。維護(530)該列表可包括調動(532)再現器來再現來自從數據源接收的數據項的數據表示項且在該列表中包括(534)這些數據表示項。此外,維護(530)列表還可包括從客戶端接收數據表示項中一個或多個的一個或多個優先級指定,且以由優先級(一個或多個)指定所規定的順序加載用於數據表示項的資源。項管理器可也向客戶端提供(540) 貫穿數據表示項的列表的列舉。參看圖6,將描述又一數據項管理器技術。圖6的技術可以包括經由數據源適配器從數據源請求(610)數據項,且對數據源的請求通過在項管理器與數據源適配器之間的接口做出。該技術也可包括經由數據源適配器從數據源接收(620)數據項。可維護(630)表示從數據源接收的數據項的數據表示項的列表,其中數據表示項可包括用戶接口元素。維護(630)該列表可包括調動¢32)再現器來再現來自從數據源接收的數據項的數據表示項且在該列表中包括(634)數據表示項。可通過在項管理器與再現器之間的接口來調動 (632)再現器。舉例而言,再現器可為由項管理器調用的函數。圖6的技術還可包括向客戶端提供(640)貫穿數據表示項的列表的列舉,該列舉通過在項管理器與客戶端之間的接口提供。向客戶端提供¢40)列舉可包括向客戶端提供(642) —個或多個佔位符,同時等待對應於佔位符(一個或多個)的一個或多個數據表示項變得對於項管理器可用。當對應於佔位符(一個或多個)的數據表示項(一個或多個)變得對於項管理器可用時,那麼項管理器可向客戶端提供(644)數據表示項(一個或多個)且指示(646)客戶端用數據表示項(一個或多個)來替換佔位符(一個或多個)。圖6的技術還可包括向客戶端提供(650)數據表示項的列表的變化通知。維護(630)數據表示項的列表可包括從客戶端接收對數據表示項的列表做出一個或多個編輯的一個或多個請求集;向數據源發送對由數據表示項所表示的數據項列表做出編輯(一個或多個)的一個或多個請求;對數據表示項的列表做出編輯(一個或多個)且告知客戶端已經做出編輯(一個或多個),無需等待數據源對數據源的請求做出響應;確定數據源是否完成了對數據項列表的編輯(一個或多個);如果項管理器確定數據源完成了對數據項列表的編輯(一個或多個),那麼保持對數據表示項的列表的編輯(一個或多個);以及如果項管理器確定數據源對完成數據項列表的編輯(一個或多個)失敗,那麼撤銷對數據表示項的列表的編輯(一個或多個)。儘管已經以特定於結構特徵和/或方法行為的語言描述了本主題,應了解,在所附權利要求中所限定的主題不必限於上文所述的具體特徵或行為。而是,上文所述的具體特徵和行為公開為實施權利要求的實例形式。
權利要求
1.一種計算機實施的方法,包括項管理器經由數據源適配器從數據源請求數據項;所述項管理器經由所述數據源適配器從所述數據源接收數據項;所述項管理器維護表示從所述數據源接收的數據項的數據表示項的列表;以及所述項管理器向客戶端提供貫穿數據表示項的列表的列舉。
2.根據權利要求I所述的方法,其中維護所述數據表示項的列表包括使所述列表中的數據表示項的狀態脫水,所述狀態表示響應於用戶輸入所述數據表示項的變化;從所述列表移除所述數據表示項;將所述數據表示項重新插回到所述列表內;以及將所述狀態再水合到所述數據表示項內。
3.根據權利要求I所述的方法,其中維護所述數據表示項的列表包括從所述客戶端接收所述數據表示項中一個或多個的一個或多個優先級指定;以及以所述一個或多個優先級指定規定的順序加載所述數據表示項的資源。
4.根據權利要求I所述的方法,其中所述方法還包括項管理器向所述客戶端提供數據表示項的列表變化的通知,且其中所述項管理器通過比較包括一個或多個數據表示項的第一數據表示與包括一個或多個數據表示項的第二數據表示來生成變化通知。
5.根據權利要求I所述的方法,其中維護所述數據表示項的列表包括從所述客戶端接收對所述數據表示項的列表做出一個或多個編輯的一個或多個請求集合;向所述數據源發送對由所述數據表示項所表示的數據項列表做出一個或多個編輯的一個或多個請求;對所述數據表示項的列表做出一個或多個編輯且告知所述客戶端已做出了所述一個或多個編輯,而無需等待所述數據源對所述一個或多個請求做出響應;如果所述項管理器確定所述數據源完成了對所述數據項列表的一個或多個編輯,那麼保持對所述數據表示項的列表的編輯;以及如果項管理器確定所述數據源未能完成對所述數據項列表的所述一個或多個編輯,那麼撤銷對所述數據表示項的列表的一個或多個編輯。
6.根據權利要求I所述的方法,其中維護所述數據表示項的列表包括請求來自所述數據源的多個數據項;響應地從所述數據源接收回不同數量的數據項;以及用表示從所述數據源接收回的數據項的不同數量的數據表示項來更新所述數據表示項的列表。
7.根據權利要求I所述的方法,其中維護所述數據表示項的列表包括從所述數據源處的數據項列表請求數據項子集,所述子集彼此重疊。
8.根據權利要求I所述的方法,其中所述數據表示項的列表表示在所述數據源處的數據項列表的一部分且維護所述數據表示項的列表包括在所述客戶端請求數據表示項時,從所述數據項列表提取附加數據項;以及釋放不再由所述客戶端使用的數據表示項。
9.一種計算機實施的方法,包括經由數據源適配器從數據源請求數據項,對所述數據項的請求通過在項管理器與所述數據源適配器之間的接口做出;經由所述數據源適配器從所述數據源接收數據項;維護表示從所述數據源接收的數據項的數據表示項的列表;所述數據表示項包括用戶接口元素,且維護所述列表包括調動再現器來再現來自從所述數據源接收的所述數據項的數據表示項,通過在所述項管理器與所述再現器之間的接口來調動所述再現器;以及將所述數據表示項包括在所述列表中;以及向客戶端提供貫穿數據表示項的列表的列舉,通過在所述項管理器與所述客戶端之間的接口來提供所述列舉,並向所述客戶端提供所述列舉包括向所述客戶端提供一個或多個佔位符,同時等待對應於所述一個或多個佔位符的一個或多個數據表示項變得對於所述項管理器可用;以及當對應於所述一個或多個佔位符的所述一個或多個數據表示項變得對於所述項管理器可用時,然後向所述客戶端提供一個或多個數據表示項且指導所述客戶端用所述一個或多個數據表示項替換所述一個或多個佔位符;以及向所述客戶端提供所述數據表示項的列表變化的通知。
10.一個或多個計算機可讀存儲介質,其具有實施於其上的計算機可執行指令,當由至少一個處理器執行時,所述指令使所述至少一個處理器執行如權利要求1-9中任一項所述的方法。
11.一種計算機系統,包括至少一個處理器;以及至少一個存儲器,其包括存儲於其上的指令,當由所述至少一個處理器執行時,所述指令使得所述至少一個處理器調動項管理器來執行包括以下的行為經由數據源適配器從數據源請求數據項;經由所述數據源適配器從所述數據源接收數據項;維護表示從所述數據源接收的數據項的數據表示項的列表,所述數據表示項包括用戶接口元素,以及維護所述列表包括調動再現器來再現來自從所述數據源接收的所述數據項的數據表示項;以及將所述數據表示項包括在所述列表中;以及向客戶端提供貫穿所述數據表示項的列表的列舉。
全文摘要
項管理器可經由數據源適配器從數據源請求和接收數據項。項管理器也可維護表示數據項的數據表示項的列表。數據表示項可包括用戶接口元素。而且,維護該列表可包括調動再現器來再現來自從數據源接收的數據項的數據表示項,且在該列表中包括數據表示項。項管理器可向客戶端提供貫穿數據表示項的列表的列舉。項管理器也可包括提供其它特徵,諸如向客戶端提供數據表示項的列表變化的通知。
文檔編號G06F9/46GK102591716SQ201210018558
公開日2012年7月18日 申請日期2012年1月20日 優先權日2011年1月21日
發明者A.S.沙, M.A.內爾特, N.布倫, P.A.古斯莫裡諾, P.J.奎亞特科夫斯基, S.A.範內斯 申請人:微軟公司