鷹翔宇空

          學習和生活

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            110 Posts :: 141 Stories :: 315 Comments :: 1 Trackbacks

          引自:http://delia.org.ru/ArticleView/2005-9-7/Article_View_129438.Htm

          一、      解釋一下智能客戶端技術

              智能客戶端(Smart Client),結合了瘦客戶端(B/S模式)和胖客戶端(C/S模式)的長處,是下一代的客戶端軟件技術。

              要了解智能客戶端,首先要認識瘦客戶端技術和胖客戶端技術各自的優(yōu)缺點。

              對于前者,典型的應用就是使用瀏覽器,通過輸入URL遠程訪問服務端,并向服務端發(fā)送命令,獲取服務端的資源,然后在客戶端的瀏覽器上顯示出來。由于這種技術數(shù)據(jù)庫存放在服務端,客戶端應用界面的也是由服務端的文件生成,因此在客戶端上占用資源少,對客戶端的設備要求不高,只需一個瀏覽器軟件和可用的網(wǎng)絡便能開始工作,另外,如果系統(tǒng)需要升級修改,只需要在服務端更新文件,當客戶再次訪問時,就可以使用新的應用系統(tǒng)了,因而部署和升級重點都放在了服務端,實現(xiàn)起來比較簡單。但是,這種B/S模式依賴網(wǎng)絡,當網(wǎng)絡不可用時或出現(xiàn)性能不穩(wěn)定的情況時就會導致客戶端變成“死界面”——既不能將數(shù)據(jù)發(fā)送回服務端進行保存,又不能從服務端獲取數(shù)據(jù)拿到客戶端操作,一切的工作將要在網(wǎng)絡恢復后才能得以繼續(xù)。

              對于胖客戶端技術,用戶在使用這種軟件時獲得的最大的感官體驗就是——它首先有自己獨特的應用程序界面,而非通過瀏覽器,用戶甚至還可以根據(jù)自己的喜好調整軟件的布局,進行豐富的界面元素的設置,這些都是B/S模式的瘦客戶端技術所不能媲美的。另外,用戶還能獲得較快的反應速度,程序可以充分利用本地機器的資源,在不使用網(wǎng)絡訪問遠程資源時,本地資源的訪問在正常情況下都能得到很快的處理。同樣的,胖客戶端技術也有著不盡人意的地方——在客戶端進行部署時,由于客戶端可能出現(xiàn)各種各樣的情況,所以需要進行必要的設置,部署起來比較困難,如果對軟件的版本進行升級,使用傳統(tǒng)的DLL技術的那將更是一個大的挑戰(zhàn),因為在.NET之前,標準Windows DLLCOM組件可能出現(xiàn)“DLL Hell”——注冊和更新軟件中的DLL時,發(fā)現(xiàn)共享的DLL被最新版本改寫了,并使該機器上的其他軟件也因此不能運行。胖客戶端有可能需要在客戶端實現(xiàn)數(shù)據(jù)庫支持,數(shù)據(jù)庫放在本地有可能導致一些安全問題,因為相對于更重視安全的服務端,客戶端相對而言還是比較脆弱的。

              那么智能客戶端技術便出現(xiàn)了,除了包括了胖/瘦客戶端各自的優(yōu)點外,它還具有如下四個最大的優(yōu)點——

          1)        充分利用終端設備的優(yōu)勢 (full PC, PDA, phone都可以滿足),因為核心部分在服務端(可能Web Service),所以終端只需實現(xiàn)表示層和一些簡單邏輯;

          2)        能夠調用 web services,在server端用web服務實現(xiàn)業(yè)務邏輯,處理各種請求,需要說明的是,由于業(yè)務邏輯實現(xiàn)放在客戶端,因此一方面為客戶端瘦身,另一方面也加強了軟件的隱蔽性和安全性;

          3)        支持在線和離線兩種狀態(tài),用戶可以在網(wǎng)絡不可用時繼續(xù)工作,并將數(shù)據(jù)臨時存放在本地,當網(wǎng)絡再次可用,數(shù)據(jù)便可傳上服務器;

          4)        能夠如同Web應用程序一般簡單方便的部署,.NET使用程序集技術,同一軟件的不同版本可以共存于統(tǒng)一客戶端。版本的升級也非常簡單,軟件訪問服務端,能自動檢測版本號,從而更新關鍵組件,實現(xiàn)升級。

           

          二、      這種技術用途是什么?前景如何?

              其實Smart Client的觀點在一些傳統(tǒng)的軟件技術中也可以看到一些影子,隨后.NET的出現(xiàn),才使這種技術的各個環(huán)節(jié)(客戶端顯示,數(shù)據(jù)連接,在線離線的操作和部署)得以無縫的實現(xiàn)。所以,這種技術是一種新型的客戶端技術的解決方案,是一種技術方法,它可以在各種終端上去實現(xiàn)。

              將桌面級的軟件做成智能客戶端軟件,可以增強其功能,因為網(wǎng)絡無限,跳出桌面,就能獲得更多的信息。

          基于Internetintranet及瀏覽器的B/S模式的系統(tǒng),將其實現(xiàn)成智能客戶端軟件,可以擴大其工作范圍,不用再依賴網(wǎng)絡,還能充分利用本地資源,加快工作效率。易于部署的優(yōu)勢在企業(yè)級應用中,更有發(fā)揮的余地,開發(fā)人員只需簡單的在服務端發(fā)布和部署,就能使客戶端同步更新。

          舉些可以使用這種技術的應用——

          “產(chǎn)品售后服務系統(tǒng)”:產(chǎn)品售后服務人員允許以脫機的形式在本地創(chuàng)建送修工單、裝箱單等,這樣可以加快本地的工作效率,當網(wǎng)絡可用時,再將這些數(shù)據(jù)傳上服務器。并可從服務器獲得需要的信息。如果本地軟件的版本低于服務端的最高版本,將提示用戶進行在線無縫地升級,大大減輕了開發(fā)人員的部署指導工作。

              隨著.NET技術的進一步成熟,尤其是Web Service技術的更廣泛應用,乃至微軟將來的系統(tǒng)全面支持.NET,我相信智能客戶端技術將會成為首選的解決方案,應用到各種軟件技術中。

           

          三、      怎么運用這種技術(通過案例)

          智能客戶端程序一般都具有偶爾性連接的特征,所以我著重講述偶爾連接的智能客戶端應用程序。同時,其與網(wǎng)路的通訊又有四種方法——Enterprise Services.NET remotingMessage Queuing(消息隊列)Web services?;谄毡榈挠^點——Web 服務是生成大多數(shù)智能客戶端應用程序的最佳方法。故在針對面向服務的方法和面向數(shù)據(jù)為中心的方法的選擇中,我決定選擇前者,因此,我重點講述Web Services作為首選通訊方式,面向服務的智能客戶端技術。

          設計面向服務的智能客戶端技術,關鍵要解決如下幾個問題,為使講述清晰,我將以一個案例作為例子。

          我們要實現(xiàn)這樣一個購書軟件(姑且命名為BuyBook,服務端有數(shù)據(jù)庫,包含兩張數(shù)據(jù)表。一張表簡單的描述了書籍的價格,這些價格是變動的,管理員可以通過工具對里面的數(shù)據(jù)進行改動;另外一張表則是書籍的訂單,記錄著訂購者ID,訂購書的ID和訂購數(shù)量。兩表只有書的ID作為主外鍵關聯(lián)著。服務端還創(chuàng)建了必要功能的web服務,以供客戶端調用。

          下面繼續(xù)接著講面向服務的Smart Client技術關鍵解決的幾個問題。

           

          1)        連接的管理

           

          智能客戶端軟件當然不能過于頻繁地訪問網(wǎng)絡上的服務端,因為這樣會嚴重影響軟件的性能,另外,對于連接發(fā)生的更改(包含如手動連接、自動連接、連接意外中斷和連接長期不用等情況)軟件也要作出相應的反應,以體現(xiàn)其智能的特點。

          那么關于連接的管理有些什么適合的方案呢,我將以我舉的范例為例,設計其在這方面的處理方法。

          BuyBook應該盡量避免和網(wǎng)絡上的服務端進行交互,即使網(wǎng)絡連接可用??梢詢?yōu)先假設為離線操作,在機器本地進行事務處理,當然這樣會造成一定的問題,有可能系統(tǒng)數(shù)據(jù)沒有和服務端數(shù)據(jù)同步,導致本地操作無效。如服務端書本的價格作為系統(tǒng)參數(shù)保留在本地,當系統(tǒng)的數(shù)據(jù)變化時,用戶在客戶端看到的書本的價格就不是真實的行情了。所以雖然優(yōu)先離線操作,也要考慮到數(shù)據(jù)出現(xiàn)不一致的情況,在數(shù)據(jù)沖突處理會得到詳細解答。

          在一些特殊的例子中,如購買股票的情況,由于股票的行情是不斷變化的,所以,為使本地數(shù)據(jù)能體現(xiàn)真實的情況,網(wǎng)絡連接應該采用隔時便來一次與服務端交互的動作,這個“隔時”的時間長度,可以用戶自定義,也可以是系統(tǒng)默認。                                                                                                                                                                                                                                                                                 

          我們還可以提供給用戶這么一個功能,他只需點一個按鈕,發(fā)送出一個訪問服務端的命令,這時連接建立,并保持這個連接,直到手動斷開,或網(wǎng)絡不可用。我們稱之為“手動連接”,與之相對應的是“自動連接”,當連接可用時,保持連接狀態(tài),將緩存中的數(shù)據(jù)處理,發(fā)送到服務端,并獲取服務端最新的一些共用系統(tǒng)參數(shù)。

          總而言之,對于連接,在設計系統(tǒng)時要把它看作是奢侈品,優(yōu)雅的對待網(wǎng)絡,無論網(wǎng)絡處于什么狀態(tài),用戶的數(shù)據(jù)操作都可以放在本地緩存。

           

          2)        WEB服務的交互

           

          面向服務的智能客戶端應用程序,通過網(wǎng)絡與服務端的交互工作重點就在于web service上。按照前面所言,應該減少這種服務端上的遠程交互,可以將本地操作緩存,并且在與web服務交互過程中,不必等待返回信息,在這延遲中可以進行其他的操作。那么要實現(xiàn)這種延遲不影響工作的功能,最有效的辦法就是使用異步通訊的方式,可以考慮使用多線程。

          WEB服務使用XML技術,CRUDCreat Read Update Delete)類型的數(shù)據(jù)庫操作,可以都通過Web Service。那么,就要講究Web Service里交互方法的定義了。當客戶進行一個Create操作時,可能關聯(lián)到系統(tǒng)參數(shù),例如BuyBook應用程序,當客戶提交訂購單時,Web服務應該先檢查本地的商品價格與服務端的價格是否一致,如果價格已經(jīng)不同,應該提示客戶更新最新的價格,然后再作訂購行為的判斷。UpateDelete操作,很可能導致數(shù)據(jù)沖突。例如刪除動作,應該在客戶端上將相關記錄標記為暫時刪除,然后在服務器上將刪除請求排隊。服務端進行刪除時一定要檢測是否有數(shù)據(jù)沖突,如果出現(xiàn)沖突,還要進行數(shù)據(jù)沖突的處理。

           

          3)        本地數(shù)據(jù)緩存

           

          智能客戶端為了能及時地響應用戶的操作,同時也是為了滿足脫機離線工作的需要,就必須將常用的固定的服務端數(shù)據(jù)緩存到本地。

          如果連接是處于在線狀態(tài)的,本地數(shù)據(jù)可以暫時保存在內存中,ADO.NET里的DataSet本身就是可以用內存臨時存儲的數(shù)據(jù)對象,數(shù)據(jù)在內存中存儲只是一個臨時過渡,當數(shù)據(jù)需要經(jīng)過操作后保存回遠程數(shù)據(jù)庫時,方法可以使用DataSet的數(shù)據(jù)適配器DataAdapter將變化的量返回數(shù)據(jù)庫操作,這樣既加快了本地的反應又節(jié)省了帶寬。

          如果,應用程序在斷線的狀態(tài)下工作,則將數(shù)據(jù)保存回本地的數(shù)據(jù)存儲結構,待再次連線時,裝載進DataSet,進行處理。

           

          4)        數(shù)據(jù)沖突處理

           

          造成數(shù)據(jù)沖突最常見的原因包括用戶在執(zhí)行更新或刪除數(shù)據(jù)的操作時,有可能該數(shù)據(jù)已經(jīng)被刪除掉了,這樣應用程序找不到更新或刪除的項,自然就會引發(fā)異常而出錯。處理這樣的情況,可以采用一個簡單的辦法,數(shù)據(jù)適配器DataAdapter能對DataSet變化進行判斷——當數(shù)據(jù)往數(shù)據(jù)庫返回時,DataAdapterUpdate方法可以檢查DataSet里每個DataRowRowState,從而可以判斷該DataRow是最新的,還是已修改或已經(jīng)刪除的,然后執(zhí)行適合的數(shù)據(jù)庫操作,像找不到數(shù)據(jù)的那種情況,DataAdapter將得知數(shù)據(jù)庫受影響的行數(shù)不大于零,并產(chǎn)生異常,從而停止更新。然后,應用程序就可以通過這個異常來處理數(shù)據(jù)沖突。

          處理辦法是,如果服務端已經(jīng)不存在用戶需要刪除的原始數(shù)據(jù),那么,只要將客戶端的該條數(shù)據(jù)刪除。如果用戶是對該數(shù)據(jù)進行更改,可以先檢測服務端的數(shù)據(jù),看是否存在,倘若不存在,則通知用戶,并視用戶的操作無效,同時將本地的那條過期數(shù)據(jù)刪除。

           

          四、      總結

          智能客戶端技術是頗有前途的下一代客戶端技術,它能夠在有網(wǎng)絡連接和網(wǎng)絡斷開的情況下靈活地工作。對用戶而言,這將是新的一種軟件使用體驗,能同時擁有C/S模式軟件快速的反應、豐富的用戶界面體驗和瘦客戶端模式那樣簡單的部署,升級。對開發(fā)者而言,開發(fā)的難度變大了,考慮的方面多了,但還是有靈活的方案可供選擇,還可以結合.NET技術,使用面向服務或面向數(shù)據(jù)的解決方案,在開發(fā)中,要著重解決“連接的管理”,“WEB服務的交互”,“本地數(shù)據(jù)緩存”和“數(shù)據(jù)沖突處理”的技術點。

          posted on 2006-02-10 14:46 TrampEagle 閱讀(320) 評論(0)  編輯  收藏 所屬分類: 技術文摘
          主站蜘蛛池模板: 通榆县| 长岭县| 昌宁县| 子洲县| 三台县| 达日县| 中山市| 菏泽市| 威远县| 扶风县| 张北县| 文化| 卢龙县| 开原市| 三江| 乌恰县| 沙洋县| 湖州市| 慈利县| 团风县| 容城县| 内江市| 五原县| 韶山市| 乐都县| 时尚| 肇东市| 尖扎县| 宽城| 游戏| 阿拉善右旗| 湛江市| 宜城市| 安化县| 平顶山市| 察雅县| 呼伦贝尔市| 托里县| 会理县| 海丰县| 瑞金市|