專利名稱:帶有后臺應用邏輯的響應式用戶界面的制作方法
帶有后臺應用邏輯的響應式用戶界面
背景技術:
終端用戶期望在即使同時有多個任務處于活動時現代的聯網應用仍然是響應式的。為解決這種期望,某些開發人員學習和實現異步模式和架構,異步模式和架構可允許用戶界面在應用邏輯運行的同時被解除阻塞。一般開發人員習慣于其中以串行的方式來執行所有任務的同步模式和架構。異步模式和架構對于這些開發人員而言可能是難以理解和正確實現的。
發明內容
無論先前的用戶界面以及應用邏輯工具和技術的優點是什么,它們都無法識別出用于本文所述和所要求保護的帶有后臺應用邏輯的響應式 用戶界面的工具和技術,也無法實現這些工具和技術所產生的優點。在一實施例中,所述工具和技術可包括在后臺線程上運行同步應用邏輯的同時在用戶界面線程上將用戶界面維護在響應式狀態中。應用邏輯可在后臺線程上訪問對象,并且用戶界面可在用戶界面線程上訪問同一對象。如此處所使用的,當用戶界面能夠對用戶輸入和更新作出響應時,用戶界面被認為處于響應式狀態中。同步應用邏輯是這樣的一種應用邏輯如果按照邏輯中規定的順序來執行任務,則該邏輯就能夠正確地操作。如此處所使用的,對象是一實體,諸如值、變量、函數或數據結構,該實體可由計算環境中的一個或多個線程操縱,諸如運行用戶界面的線程和/或運行應用邏輯的線程。在所述工具和技術的另一實施例中,可接收對要在對象上完成的工作的請求。工作在廣義上用來指代對對象的任何類型的操縱,諸如修改對象、加載來自對象的信息等。可以確定該工作是要被分派到運行應用邏輯的至少一個后臺線程還是要被分派到運行一個或多個用戶界面元素的至少一個用戶界面線程。如果請求要被分派到至少一個后臺線程,則該工作可被分派到所述至少一個后臺線程而不必阻塞所述至少一個用戶界面線程。然而,如果請求要被分派到至少一個用戶界面線程,則該工作可被分派到所述至少一個用戶界面線程,并且所述至少一個后臺線程可被阻塞。在所述工具和技術的又一實施例中,一個或多個用戶界面元素可在用戶界面線程上運行。用戶界面元素可表示業務對象的至少一部分。業務邏輯可被應用于后臺線程上的業務對象,并且業務對象可在用戶界面線程上被修改。在對象在用戶界面線程上被修改的同時,后臺線程可被阻塞。如此處所使用的,業務對象是表示一個或多個業務項目的對象,諸如人(顧客、廠商、雇員等)、發票、會議室、大樓等。業務邏輯是被應用于一個或多個業務對象的應用邏輯,諸如被應用以使得對象如對于該對象所表示的業務項目的類型所預期般地操作的邏輯、或者被應用以使得對象配置以符合特定業務實體的規則(用戶對象可訪問特定類型的發票的規則等等)的邏輯。提供本發明內容是為了以簡化的形式介紹一些概念。這些概念將在以下具體實施方式
中進一步描述。本發明內容并不旨在標識所要求保護主題的關鍵特征或必要特征,也不旨在用于限制所要求保護主題的范圍。類似地,本發明不限于解決在背景技術具體實施方式
、或附圖中討論的特定技術、工具、環境、缺點、或優點的實現。
圖I是其中可實現所描述的各實施例中的一個或多個實施例的合適的計算環境的框圖。圖2是結合使用其可實現所描述的各實施例中的一個或多個實施例的計算環境的框圖。圖3是示出用于執行從對象的信息的雙線程數據讀取的技術的一示例的示意圖。圖4是示出用于執行至對象的信息的雙線程數據寫入的技術的一示例的示意圖。、
圖5是用于帶有后臺應用邏輯的響應式用戶界面的技術的流程圖。圖6是用于帶有后臺應用邏輯的響應式用戶界面的另一技術的流程圖。圖7是用于帶有后臺應用邏輯的響應式用戶界面的又一技術的流程圖。圖8是用于帶有后臺應用邏輯的響應式用戶界面的又一技術的流程圖。
具體實施例方式此處描述的各實施例涉及用于在應用邏輯在后臺中運行的同時允許用戶界面保持響應式的改進的技術和工具。這可以在應用邏輯開發人員不必理解異步開發技術的情況下實現。這種改進和/或其他改進可源于分開或組合地使用各種技術和工具。這些技術和工具可包括具有能夠被用戶界面線程和后臺線程訪問的對象。同步應用邏輯可在后臺線程上運行。因此,該應用邏輯的開發人員可以不實現或甚至不理解異步模式和編碼技術。在應用邏輯在后臺線程上運行的同時,用戶界面可在用戶界面線程上被維持在響應式狀態中。即使在后臺線程正在運行與對象有關的應用邏輯時,用戶界面線程也可以處于運行中。當用戶界面線程接收到請求操縱該對象的用戶輸入時,用戶界面線程可通過將該用戶輸入轉發至后臺線程并且隨后在無需同步地等待操縱代碼完成的情況下繼續來異步地履行所述請求。轉發和/或發送諸如請求、用戶輸入等的通信可包括將通信轉換成不同的形式、將通信與其他的通信進行組合、將通信分成各個部分等等。后臺線程可使用應用邏輯來處理該用戶輸入。如果對象要被操縱,則后臺線程可直接訪問該對象并操縱該對象。然而,在某些情形中,可能需要在用戶界面線程上通知用戶界面元素該對象已經被操縱。如果是這樣,則工作請求可被發送至用戶界面線程以供用戶界面線程本身執行操縱,以使得可在用戶界面線程上如預期地提出變更通知。在這種情況下,后臺線程可同步地等待用戶界面線程完成操縱。用戶界面和后臺線程之間的通信可通過對象來進行。由此,后臺和用戶界面線程可如它們與應用對象正常交互得那樣各自與對象交互。然而,該對象可包括與兩個線程交互的功能,以及在兩個線程之間傳遞任務和通信的功能。由此,從此處描述的工具和技術中可以實現一個或多個實質的益處。例如,開發人員可開發用于在后臺線程上運行的同步應用邏輯。例如,對象與多個線程進行交互的功能可被內置到軟件開發系統中,諸如Microsoft’ s Visual Studio 幵發系統中。開發人員可使用該開發系統來開發具有開發人員和/或開發系統所提供的應用邏輯的應用,諸如在Visual studio 開發系統中開發的用于在Microsoft’ s Silverlight 瀏覽器插件上運行的應用。然而,也可使用其他類型的應用和/或其他類型的軟件開發系統。無論具體的開發系統和/或應用類型是什么,開發人員都可以同步地構造應用邏輯。然而,如上所述,此處描述的工具和技術可允許用戶界面將請求對象操縱的用戶輸入轉發至后臺線程,并且在不必同步地等待操縱代碼完成所請求的操縱的情況下就繼續。由此,即使在應用邏輯在后臺線程中運行的同時,用戶界面線程以及在該用戶界面線程上運行的用戶界面元素也可以是響應式的。所附權利要求中定義的主題不必限于本文描述的益處。本發明的特定實現可提供本文描述的益處的全部、一些、或未提供本文描述的益處。盡管本文出于呈現的目的以特定的順序次序描述了用于各種技術的操作,但應理解除非要求特定的排序,否則這種描述方式涵蓋了操作順序上的重新安排。例如,在某些情況下,可以重新安排或并發執行順序地描述的操作。本文參照流程圖描述的技術可被用于本文描述的一個或多個系統和/或用于一個或多個其他系統。例如,此處描述的各種工具和技術可用硬件或軟件、或兩者的組合來實現。此外,為了簡單起見,流程圖可能未示出可結合其他技術來使用特定技術的各種方式。I.示例性計算環境 圖I示出其中可實現所描述的各實施例中的一個或多個實施例的合適的計算環境(100)的一般化示例。例如,一個或多個這樣的計算環境可用作用于帶有后臺應用邏輯的響應式用戶界面的環境。一般而言,可使用各種不同的通用或專用計算系統配置。適用于此處所描述的工具和技術的公知計算系統配置的示例包括,但不限于,服務器場和服務器群集、個人計算機、服務器計算機、手持式或膝上型設備、多處理器系統、基于微處理器的系統、可編程消費電子產品、網絡PC、小型機、大型計算機、包括上述系統或設備中的任一個的分布式計算環境等。計算環境(100)不旨在對本發明的使用范圍或功能提出任何限制,因為本發明可以在完全不同的通用或專用計算環境中實現。參考圖1,計算環境(100)包括至少一個處理單元(110)和存儲器(120)。在圖I中,這一最基本的配置(130)被包括在虛線內。處理單元(110)執行計算機可執行指令,并且可以是真實或虛擬處理器。在多處理系統中,多個處理單元執行計算機可執行指令以提高處理能力。存儲器(120)可以是易失性存儲器(例如,寄存器、高速緩存、RAM)、非易失性存儲器(例如,如1^£ 1 011、閃存)、或兩者的某種組合。存儲器(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)可以是諸如鍵盤、鼠標、筆或跟蹤球等觸摸輸入設備;語音輸入設備;掃描設備;網絡適配器KD/DVD讀取器;或可向計算環境(100)提供輸入的另一設備。輸出設備(160)可以是顯示器、打印機、揚聲器、⑶/DVD刻錄機、網絡適配器、或從計算環境(100)提供輸出的另一設備。
通信連接(170)允許通過通信介質與另一計算實體進行通信。因此,計算環境
(100)可使用通往諸如個人計算機、服務器、路由器、網絡PC、對等設備或另一常見網絡節點等一個或多個遠程計算設備的邏輯連接而工作在聯網環境中。通信介質以已調制數據信號的形式傳達諸如數據或計算機可執行指令或請求等信息。已調制數據信號是其一個或多個特征以在信號中編碼信息的方式設置或改變的信號。作為示例而非局限,通信介質包括以電、光、RF、紅外、聲學或其他載波實現的有線或無線技術。各種工具和技術可以在計算機可讀介質的一般上下文中描述。計算機可讀介質可以是可在計算環境內訪問的任何可用介質。作為示例而非局限,對于計算環境(100),計算機可讀介質包括存儲器(120)、存儲(140)、和以上的組合。這些工具和技術可在諸如程序模塊中所包括的在目標真實或虛擬處理器上的計算環境中執行的計算機可執行指令的一般上下文中描述。一般而言,程序模塊包括執行特定任務或實現特定抽象數據類型的例程、程序、庫、對象、類、組件、數據結構等。程序模塊的功能可以如各實施例中所需的組合或在程序模塊之間分離。用于程序模塊的計算機可執行指令可以在本地或分布式計算環境中執行。在分布式計算環境中,程序模塊可以位于本地和遠程計算機存儲介質中。出于演示的目的,詳細描述使用了如“確定”、“選擇”、“調整”、“發送”和“操作”等術語來描述計算環境中的計算機操作。這些以及其他類似術語是對計算機執行的操作的高層抽象,并且不應混淆于人類執行的動作,除非明確指出人類(諸如“用戶”)的動作執行。對應于這些術語的實際的計算機操作取決于實現而不同。II.用于具有應用邏輯的響應式用戶界面的系統和環境圖2是結合其可諸如通過在運行后臺應用邏輯的同時將用戶界面維持在響應式狀態中來實現此處描述的各實施例中的一個或多個實施例的計算環境(200)的框圖。計算環境(200)可包括諸如業務對象的應用對象(210)。對象(210)可包括可操作用于調度多個線程上的任務的調度程序(212),如下文更詳細地描述的。另選地,調度程序可在對象(210)外部。A.用戶界面組件用戶界面(220)可包括一個或多個用戶界面元素,它們可表示對象(210)的至少一部分。例如,用戶界面可包括表示對象(210)中的一個或多個數據域的一個或多個標準用戶界面元素(列表、復選框、文本框、按鈕、圖、圖片等)。用戶界面可在用戶界面線程(222)上運行,或可能地在諸如線程池之類的多個用戶界面線程(未示出)上運行。用戶界面線程(222)可專用于用戶界面(220),或者它可為諸如其他用戶界面共享。用戶界面線程(222)可根據標準排隊實踐(先進先出排序等)來從用戶界面任務隊列(224)接收任務。用戶界面分派器(226)可從對象(210)中的調度程序(212)接收任務,并且可將任務輸入到用戶界面任務隊列(224)中以供在用戶界面線程(222)上執行。同樣,用戶界面線程(222)可訪問對象(210 ),諸如以將修改或訪問請求傳遞給對象(210)。在操縱對象(210 )時還可諸如通過使來自對象的信息被加載或通過修改對象(210)在用戶界面線程(222)上發出針對一個或多個監聽者(諸如用戶界面(220)) 通知。B.邏輯和后臺組件諸如業務邏輯之類的應用邏輯(230)可在后臺線程(232)上運行并且可被應用于對象(210)。例如,應用邏輯(230)可包括控制對對象(210)的修改和訪問的標準邏輯。應用邏輯(230)可在后臺線程(232)上運行。事實上,應用邏輯(230)可在諸如線程池配置中的多個后臺線程(232)上運行,并且線程可專用于或可以不專用于運行應用邏輯(230)。后臺任務隊列(234)可根據標準排隊實踐(先進先出排序等)來將任務提供給后臺線程(232)。后臺分派器(236)可從對象(210)中的調度程序(212)接收任務,并且可將任務輸入到后臺任務隊列(234)中以供在后臺線程(232)上執行。同樣,后臺線程(232)可訪問對象(210),諸如以將修改或訪問請求傳遞給對象(210)。在操縱對象(210)時還可在后臺線程(232)上發出針對一個或多個監聽者(諸如來自應用邏輯(220)的監聽者)的通知。C.與用戶界面和后臺線程的對象交互對于對象(210)的操作以及它的調度程序(212)與用戶界面分派器(226)以及后臺分派器(236)之間的交互可允許同步應用邏輯(230)以異步的方式(即,應用邏輯(230)可在后臺線程(232)上運行,同時用戶界面(220)保持解除阻塞并且在用戶界面線程(222)上是響應式的)在后臺線程(232)上運行。當工作由后臺線程(232)發起時,工作可被分派到用戶界面分派器(226)從而以同步的方式來運行(S卩,用戶界面線程(222)可執行從后臺線程(232)分派的工作,同時后臺線程(232)被阻塞)。這可以允許避免線程(222和232)之間的沖突,因為在用戶界面線程(222)實際上操縱對象(210)的同時后臺線程(232)可被阻塞。此外,即使應用邏輯(230)是同步的,在應用邏輯(230)在運行的同時,用戶界面(220)也可保持響應式的。調度程序(212)可隱式地知曉用于對象(210)的用戶界面分派器(226)和后臺分派器(236)。如下文中更詳細地討論的,對象(210)可能已經定義了用于從用戶界面線程(222)或后臺線程(232)進行訪問的行為,以使得用戶界面數據綁定和后臺應用邏輯任務可并發地工作。因此,對象(210)可從線程(222或232)中的任一個的角度來管理共同的操作,并且組織用戶界面分派器(226)和后臺分派器(236)之間的工作,以使得每一線程(222和232)都可以看見業務對象(210)的一致的視圖而不會意識到有其他線程(222或232)。對象(210)可如此操作以使得用戶界面線程不被阻塞,即使在應用邏輯(230)正在對象(210)上運行的時候。應用邏輯(230)可由后臺分派器(236)在后臺線程(232)上執行。對應用邏輯(230)的這種執行可包括命令、數據確認、屬性計算、數據訪問等。諸如數據綁定以及用戶界面元素的執行的用戶界面(220)的任務可由用戶界面分派器(226)在用戶界面線程(222)上執行。用戶界面線程(222)和后臺線程(232)可發起業務對象(210)的屬性獲取和設置以及命令調用。另外,用戶界面線程(222)和后臺線程(232)可監聽對象(210)的變更事件,諸如屬性和列表變更事件。可在監聽者自己的線程(222或232)上發出通知。另外,對象(210)和它的調度程序(212)可以在分派器(226和236)之間來回移動工作,并且按需阻塞后臺線程。這種配置可允許用戶界面(220)和應用邏輯(230)兩者都看見對象(210)的一致的視圖,并且即使在應用邏輯(230)在對象(210)上運行時也允許用戶界面(220)保持響應式的。 有了計算環境(200 )的這些特征,可以實現一個或多個益處。例如,用戶界面線程(222)和后臺線程(232)兩者可看見業務對象(210)的一致的狀態,而不存在線程之間的數據競賽或高速緩存相干性問題。應用邏輯(230)可被編寫成要在同步環境中運行似的,盡管它可在用戶界面(220)是響應式的同時運行。因此,應用邏輯(230)的開發人員可用同步的方式來編寫應用邏輯,并且通常可在調試的同時與當前的后臺線程(232)交互。此外,對于終端用戶,用戶界面(220)可保持響應式的,并且很大程度上與對象(210)的真實狀態(如后臺線程(232)所表示的)保持一致。當應用邏輯(230)在運行時,運行應用邏輯(230)和用戶界面(220)的應用可以運行而無需掛起,并且用戶界面(220)可立即刷新以指示對業務對象(210)的當前狀態的變更。盡管用戶界面(220)能夠保持很大程度的一致,但在由后臺線程(232)處理對信息的更新時在更新用戶界面(220)上的信息方面可能存在某些時間滯后。如果時間滯后太長,則用戶界面(220)可通知用戶后臺線程正在工作(諸如通過更新值)。這可以通過以下方式來實現用戶界面(220)詢問后臺分派器(236)它當前是否正在處理,并且如果是,則通知用戶該值可能被改變。例如,用戶界面可呈現中間待處理狀態(如果存在待處理的工作)。應用可與多個對象(210)交互。在一種配置中,每一個這樣的對象(210)可具有其自己專用的后臺分派器(236)。另選地,更復雜的后臺分派器(236)能夠與多個對象交互。這可能還涉及更復雜的對象(210),諸如包括更復雜的調度程序(212)的對象。應用還可具有多個用戶界面(220),諸如在應用具有多個屏幕并且每一個屏幕被認為是單獨的用戶界面(220)的情況中。每一個這樣的用戶界面(220)可具有其自己的專用的用戶界面分派器(226),所述分派器將任務分派給一個或多個線程。然而,再一次,更復雜的用戶界面分派器(226)和/或更復雜的對象(210)可允許用戶界面分派器(226)在多個用戶界面(220)和/或多個用戶界面線程(222)之間共享。III.雙線程的數據讀取和寫入現在將參考圖3和圖4來討論用于對象的雙線程的數據讀取和寫入的技術。圖3和圖4被簡化以忽略諸如用戶界面和后臺分派器以及對象調度程序的細節。然而,用戶界面和后臺分派器可用于將任務分派到各個線程,并且對象中的調度程序可為圖3-4的技術在不同的線程/分派器之間調度任務,如上文參考圖2所討論的。A.對象的雙線程數據讀取現在參考圖3,將討論用于執行從對象的信息的雙線程數據讀取的技術(300)的一示例。圖3在中心示出對象(310)。用戶界面(320)可表示對象(310)的至少一部分,并且可以在用戶界面線程(322 )上運行,該線程在對象(310)的左邊示出。在對象(310 )的右邊,應用邏輯(330)被示為在后臺線程(332)上運行。在圖3中的附圖下半部分以及下文討論的圖4中示出稍后的動作,盡管在實際操作中可對這些動作進行某種重新排序。用戶界面(320)可發起數據讀取。例如,這可以響應于請求用戶界面元素來顯示來自對象(310)的信息的用戶輸入來完成。由此,用戶界面(320)可將請求(350)發送給對象(310)以獲得信息(諸如關于顧客的信息、關于發票的信息等)。例如,這可包括作出對于對象(310)的應用編程接口(API)調用。對象(310)可識別出該調用來自用戶界面線程(322)而非后臺線程。由此,對象(310)可返回所請求的當前信息而無需加載該信息。這可導致該對象將空信息返回(352)發送給用戶界面線程(322)上的用戶界面(320)。對象(310)還可通過 將獲得請求(350)排隊(354)至后臺線程(332)來將信息請求轉發至后臺線程(332)上的應用邏輯(330)。響應于排隊(354)至后臺線程(332)的獲得請求(350 ),應用邏輯(330 )可被應用(355 )于所述獲得請求(350 )。例如,應用邏輯(330 )可被應用(355)以確定在應用邏輯(330)下用戶是否被授權訪問所請求的信息。如果所請求的對信息的讀取被授權,則在后臺線程(332)上運行的應用邏輯(330)可發送獲得請求(356)(諸如通過發出對于對象(310)的API調用),從而向對象(310)請求信息。對象可識別出獲得請求(356 )是來自后臺線程(332 )的,并且可阻塞(358 )后臺線程(332),同時在用戶界面線程(322)上加載和設置對象(310)。例如,這可以通過以下方式來完成對象(310)將任務在用戶界面線程(322)上排隊,這將導致用戶界面線程(322)發出要從對象(310)加載和設置所請求的信息的低級調用。對象(310)可識別出這一低級調用,并且可以在用戶界面線程(322)上加載和設置(370)所請求的信息而非將該低級調用轉發至后臺線程(332)。這可導致向用戶界面線程上的一個或多個監聽者發出變更的通知(372)(加載和設置所請求的信息)。用戶界面(320)可接收該通知(372),并且可以通過讀取新加載的信息并更新用戶界面(320)中的任何對應的元素來作出響應。另外,對象(310)可對后臺線程解除阻塞(374)并且向后臺線程上的一個或多個監聽者發出變更通知(376)。另外,響應于所述獲得請求(356),所請求的信息可被返回(378)至后臺線程(332)中的應用邏輯(330)。在這一技術中,應用邏輯(330)可在后臺線程(332)中同步地應用于獲得關于對象的信息的請求(350)。在這么做的同時,用戶界面(320)可保持在用戶界面線程(322)上運行而不被阻塞,以使得結果實際上是對后臺線程(332)和用戶界面線程(322)的并行操作。由此,用戶界面(320)可保持對用戶輸入是響應式的,即使應用邏輯(330)正被應用于獲得請求(350 )。然而,在用戶界面線程(322 )加載和設置(370 )所請求的信息的同時后臺線程可被阻塞(358),以使得可以避免兩個線程(322和332)之間的沖突,諸如數據競賽。這可以在允許應用邏輯(330)以同步的方式被構造、緩解應用邏輯開發人員必須應用復雜的異步編碼技術的負擔的同時來實現。如果并未預期要在用戶界面線程上完成所述獲得,則后臺線程還可直接在后臺線程上獲得數據而不涉及用戶界面線程。這可以在以下情況下完成通過高速緩存剛剛檢索到的值或者設置值而不使值變化(諸如在數據獲得請求是針對已經被加載的值的情況下)。在從后臺線程接收要獲得數據的請求時,對象可確定所述獲得是否可在后臺線程上完成、或者所述獲得是否要在用戶界面線程上完成。B.對于對象的雙線程的數據寫入現在參考圖4,將討論用于執行至對象的信息的雙線程數據寫入的技術(400)的一示例。類似于圖3,圖4在中心示出對象(410)。用戶界面(420)表示對象(410)的至少一部分,并且在用戶界面線程(422)上運行,該線程在對象(410)的左邊示出。在對象(410)的右邊,應用邏輯(430)被示為在后臺線程(432)上運行。用戶界面(420)可例如響應于對與對象(410)中的信息相對應的用戶界面元素作出變更的用戶輸入而發起數據寫入。由此,用戶界面(420)可將設置請求(450)發送至對象(410)以通過在對象(410)中設置新的信息來修改信息。例如,這可包括作出對于對象(410)的API調用。對象(410)可識別出該調用來自用戶界面線程(422)而非后臺線程。由此,對象(410)可將返回(452)發送至用戶界面(420)而無需實際地設置信息。對象(410)還可通過將設置請求(450)排隊(454)至后臺線程(432)來將信息請求轉發至后臺線程(432)上的應用邏輯(430)。響應于排隊至后臺線程(432)的設置請求(450),應用邏輯(430)可被應用于(455)所述請求。例如,應用邏輯(430)可被應用(455)以確定在該應用邏輯下用戶是否被授權修改所請求的信息、或者確定是否要發起對所述對象(410)或一個或多個其他對象的相關修改。如果所請求的對信息的寫入被授權,則在后臺 線程(432)上運行的應用邏輯(430)可發送設置請求(456)(諸如通過發出對于對象(410)的API調用),從而請求設置該信息。對象(410)可識別出設置請求(456)是來自后臺線程(432)的,并且可阻塞(458)后臺線程(432),同時在用戶界面線程(422)上修改對象(410)。例如,這可以通過以下方式來完成對象(410)將任務在用戶界面線程(422)上排隊,這將導致用戶界面線程(422)發出要通過設置新的信息來修改對象(410)的低級調用。對象(410)可識別出這一低級調用,并且可以在用戶界面線程(422)上設置(470)所請求的信息而非將該低級調用轉發至后臺線程(432)。這可導致向用戶界面線程(422)上的一個或多個監聽者發出變更的通知(472)(設置所請求的信息)。用戶界面(420 )可接收該通知(472 ),并且可以通過讀取新設置的信息并更新用戶界面(420)中的任何對應的元素來作出響應。另外,對象(410)可對后臺線程(432)解除阻塞(474)并且向后臺線程(432)上的一個或多個監聽者發出變更通知(476)。另外,響應于設置請求(456),返回(478)可被發送至后臺線程中的邏輯應用(430),所述返回報告信息已被成功設置。類似于上述數據讀取技術(300),在這一數據寫入技術(400)中,應用邏輯(430)可在后臺線程(432)中同步地應用于設置關于對象(410)的信息的請求(450)。在這么做的同時,用戶界面(420)可保持在用戶界面線程(422)上運行而不被阻塞,以使得整個結果是異步操作。由此,用戶界面(420)可保持對用戶輸入是響應式的,即使應用邏輯(430)正被應用于設置請求(450 )。然而,在用戶界面線程(422 )設置(470 )所請求的信息的同時后臺線程可被阻塞(458),以使得可以避免兩個線程(422和432)之間的沖突,諸如數據競賽。這可以在允許應用邏輯(430)以同步的方式被構造、緩解應用邏輯開發人員必須應用復雜的異步編碼技術的負擔的同時來實現。如果正被設置的值對于其他值而言是獨立的,并且在用戶界面檢查對象期間不會造成潛在的不一致,則后臺線程還可直接在后臺線程上設置數據而不涉及用戶界面。在從后臺線程接收要設置數據的請求時,對象可確定所述設置是否可在后臺線程上設置、或者所述設置是否要在用戶界面線程上設置。IV.用于帶有后臺應用邏輯的響應式用戶界面的技術
將參考圖5和圖6來討論用于帶有后臺應用邏輯的響應式用戶界面的技術。首先參考圖5,在該技術中,同步應用邏輯可在至少一個后臺線程上運行(510),并且應用邏輯可訪問對象。對象可以是業務對象,而應用邏輯可以是業務邏輯。在應用邏輯運行(510)的同時,用戶界面可在至少一個用戶界面線程上被維持(520)處于響應式狀態,并且用戶界面可以訪問對象。維持(520)用戶界面處于響應式狀態可包括不阻塞所述至少一個用戶界面線程,并且所述維持(520)還可包括在所述至少一個用戶界面線程上訪問對象。參考圖6,該技術還可包括將來自所述至少一個用戶界面線程的用戶輸入請求發送(610)至所述對象,并且將所述用戶輸入請求從所述對象轉發(620)至至少一個后臺線程的分派器。另外,該技術可包括,響應于接收到用戶輸入請求,將所述用戶輸入請求分派(630)到至少一個后臺線程的工作線程,將應用邏輯應用(640)于所述工作線程上的用戶輸入請求,將所述工作請求從所述工作線程發送(650)至所述對象,以及將所述工作請求從所述對象轉發(660)至所述至少一個用戶界面線程的分派器。該技術還可包括,響應于在所述至少一個用戶界面線程的分派器處接收到工作請求,在所述至少一個用戶界面線程上執行(670)對象上的工作(設置對象中的信息、從對象加載信息等)。另外,在所述至少一個用 戶界面線程上執行(670)所述工作的同時,所述至少一個后臺線程可被阻塞(680)。例如,如果所述至少一個后臺線程是線程池,則所述阻塞可包括阻塞多個線程或者僅僅阻塞實際上處理所述工作的那個線程。現在參考圖7,將討論用于帶有后臺應用邏輯的響應式用戶界面的另一技術。在該技術中,可接收(710 )要完成對象(諸如業務對象)上的工作的請求。例如,工作可包括從對象加載信息、設置對象中的信息等等。請求可在對象本身處被接收(710)。可以確定(720)該工作是要被分派到運行應用邏輯(諸如業務邏輯)的至少一個后臺線程還是要被分派到運行一個或多個用戶界面元素的至少一個用戶界面線程。例如,確定(720)所述工作是要被分派到至少一個后臺線程還是被分派到至少一個用戶界面線程可包括,確定所述請求是來自至少一個后臺線程的還是來自至少一個用戶界面線程的。如果請求來自至少一個用戶界面線程而沒有由至少一個后臺線程處理,則確定(720)所述工作是要被分派到至少一個后臺線程還是被分派到至少一個用戶界面線程可包括,確定所述工作要由至少一個后臺線程來完成。如果請求要被分派到至少一個后臺線程,則所述工作可被分派(730)到至少一個后臺線程而不必阻塞所述至少一個用戶界面線程。然而,如果請求要被分派到至少一個用戶界面線程,則所述工作可被分派(735)到所述至少一個用戶界面線程,并且所述至少一個后臺線程可被阻塞(750)。如果所述工作被分派(730)到至少一個后臺線程,則該技術該可包括將應用邏輯應用(740)于所述至少一個后臺線程上的請求。現在參考圖8,將討論用于帶有后臺應用邏輯的響應式用戶界面的又一技術。該技術可包括在至少一個用戶界面線程上運行(810)—個或多個用戶界面元素。該一個或多個用戶界面元素可表示業務對象的至少一部分。用戶輸入請求可從至少一個用戶界面線程被發送(815)至至少一個后臺線程。業務邏輯可被應用(820)于至少一個后臺線程上的業務對象,并且該業務對象可在至少一個后臺線程上被訪問(840)而不必阻塞至少一個用戶界面線程。同樣,修改請求可從至少一個后臺線程被發送(850)至至少一個用戶界面線程。例如,修改請求可被發送至對象并從該對象被轉發至至少一個用戶界面線程。修改請求可響應于發送自至少一個用戶界面線程的用戶輸入請求而被發送(850)至至少一個后臺線程。將用戶輸入請求從至少一個用戶界面線程發送至至少一個后臺線程可包括,將用戶輸入請求發送至對象并且將用戶輸入請求從該對象轉發至至少一個后臺線程。業務對象可在至少一個用戶界面線程上被修改(870),并且在至少一個用戶界面線程修改業務對象的同時至少一個后臺線程可被阻塞(880)。所述修改(870)可響應于來自至少一個后臺線程的請求而完成。在業務對象被修改(870)之后,至少一個后臺線程可被解除阻塞(890)。盡管用結構特征和/或方法動作專用的語言描述了本主題,但可以理解,所附權利要求書中定義的主題不必限于上述具體特征或動作。更確切而言,上述具體特征和動作是作為實現權利要求的示例形式公開的。·
權利要求
1.一種計算機系統,包括 至少ー個處理器;以及 包括存儲于其上的指令的存儲器,所述指令在由所述至少一個處理器執行時致使所述至少ー個處理器執行以下動作 在至少ー個后臺線程上運行同步應用邏輯,所述應用邏輯在所述至少一個后臺線程上訪問對象;以及 在所述至少ー個后臺線程上運行所述同步應用邏輯的同時,在至少ー個用戶界面線程上維持用戶界面處于響應式狀態,所述用戶界面在所述至少一個用戶界面線程上訪問所述對象。
2.如權利要求I所述的計算機系統,其特征在于,維持所述用戶界面處于響應式狀態包括不阻塞所述至少一個用戶界面線程。
3.如權利要求I所述的計算機系統,其特征在于,維持所述用戶界面處于響應式狀態包括在所述至少一個用戶界面線程上訪問所述對象。
4.如權利要求I所述的計算機系統,其特征在于,所述對象是業務對象并且所述應用邏輯是業務邏輯。
5.如權利要求I所述的計算機系統,其特征在于,所述動作還包括 將用戶輸入請求從所述至少ー個用戶界面線程發送至所述對象;以及 將所述用戶輸入請求從所述對象轉發至所述至少一個后臺線程的分派器。
6.如權利要求5所述的計算機系統,其特征在干,響應于在所述至少一個后臺線程的分派器處接收到所述用戶輸入請求,所述動作還包括 將所述用戶輸入請求分派到所述至少一個后臺線程的工作線程; 在所述工作線程上將所述應用邏輯應用于所述用戶輸入請求; 將工作請求從所述工作線程發送至所述對象;以及 將所述工作請求從所述對象轉發至所述至少一個用戶界面線程的分派器。
7.如權利要求6所述的計算機系統,其特征在于,所述動作還包括,響應于在所述至少一個用戶界面線程的分派器處接收到所述工作請求,在所述至少一個用戶界面線程上執行所述對象上的工作。
8.如權利要求7所述的計算機系統,其特征在于,所述動作還包括,在所述至少ー個用戶界面線程上執行工作的同時阻塞所述至少ー個后臺線程。
9.一種計算機實現的方法,包括 接收對要在對象上完成的工作的請求; 確定所述工作是要被分派到運行應用邏輯的至少ー個后臺線程還是要被分派到運行一個或多個用戶界面元素的至少ー個用戶界面線程; 如果所述請求要被分派到所述至少ー個后臺線程,則將所述工作分派到所述至少ー個后臺線程而不必阻塞所述至少一個用戶界面線程;以及 如果所述請求要被分派到所述至少一個用戶界面線程,則將所述工作分派到所述至少一個用戶界面線程并且阻塞所述至少ー個后臺線程。
10.如權利要求9所述的方法,其特征在于,確定所述工作是要被分派到至少ー個后臺線程還是被分派到至少ー個用戶界面線程包括,確定所述請求是來自所述至少ー個后臺線程的還是來自所述至少ー個用戶界面線程的。
11.如權利要求9所述的方法,其特征在于,如果所述請求來自所述至少ー個用戶界面線程而沒有由所述至少ー個后臺線程處理,則確定所述工作是要被分派到至少ー個后臺線程還是被分派到至少ー個用戶界面線程包括,確定所述工作要由所述至少一個后臺線程來完成。
12.如權利要求9所述的方法,其特征在于,所述對象是業務對象并且所述應用邏輯是業務邏輯,并且所述方法還包括,如果所述工作被分派到所述至少ー個后臺線程,則在所述至少ー個后臺線程上將所述業務邏輯應用于所述請求。
13.如權利要求9所述的方法,其特征在于,所述請求在所述對象處被接收。
全文摘要
在同步應用邏輯在后臺線程上運行的同時,用戶界面可在用戶界面線程上被維持在響應式狀態中。應用邏輯可在后臺線程上訪問對象,并且用戶界面可在用戶界面線程上訪問同一對象。另外,可接收對要在對象上完成的工作的請求。如果請求要被分派到后臺線程,則該工作可被分派到后臺線程而不必阻塞用戶界面線程。然而,如果請求要被分派到至少一個用戶界面線程,則該工作可被分派到所述用戶界面線程,并且所述后臺線程可被阻塞。
文檔編號G06F3/048GK102667713SQ201080053016
公開日2012年9月12日 申請日期2010年10月29日 優先權日2009年11月24日
發明者J·J·里瓦德, S·P·阿農森, S·W·普羅文 申請人:微軟公司