仇強(qiáng) 王壯峰 王麗 胡慶 耿偉
摘要:病人回訪系統(tǒng)就是信息化在醫(yī)療衛(wèi)生方面的發(fā)展的產(chǎn)物。該文具體講述了在三層架構(gòu)(即用戶界面層、業(yè)務(wù)邏輯層以及數(shù)據(jù)訪問(wèn)層)的基礎(chǔ)上對(duì)系統(tǒng)設(shè)計(jì)中通訊方式的分析與選擇,包括背景、通訊方式的具體內(nèi)容、通訊方式的比較以及通訊方式的選擇。
關(guān)鍵詞:三層架構(gòu);通訊方式;病人回訪系統(tǒng);通訊方式的比較;通訊方式的選擇
1背景介紹
1.1病人回訪制度
隨著醫(yī)療衛(wèi)生事業(yè)的發(fā)展,各國(guó)的醫(yī)療也在追求全面、高效率、高質(zhì)量、人性化的服務(wù).病人回訪系統(tǒng)作為醫(yī)療衛(wèi)生事業(yè)的進(jìn)步和發(fā)展的產(chǎn)物,它將患者的滿意度作為衡量醫(yī)療服務(wù)質(zhì)量管理的金指標(biāo),在醫(yī)院得到了廣泛的應(yīng)用。我國(guó)的病人回訪系統(tǒng)的發(fā)展尚且處于初級(jí)階段,目前全國(guó)大部分醫(yī)院都是采用電話回訪的方式對(duì)病人進(jìn)行一系列的詢(xún)問(wèn)并且記錄。
病人回訪制度極大意義上促進(jìn)了醫(yī)療衛(wèi)生事業(yè)的發(fā)展。首先,醫(yī)療服務(wù)水平是醫(yī)院在競(jìng)爭(zhēng)中求發(fā)展的根本能力之一,對(duì)患者進(jìn)行統(tǒng)一的電話回訪,使之暢所欲言提高獲得信息的真實(shí)性,為改進(jìn)醫(yī)院工作提供有力的證據(jù)”。其次,通過(guò)對(duì)出院病人進(jìn)行回訪,有助于醫(yī)患關(guān)系的和諧發(fā)展;有助于增加醫(yī)患之間的溝通與交流;有助于醫(yī)生了解病人的病情,從而給予病人一系列的建議,促進(jìn)患者的病情恢復(fù);同時(shí)樹(shù)立醫(yī)院在病人心中的良好的形象。
1.2三層架構(gòu)體系
三層體系結(jié)構(gòu)即三層架構(gòu)包括用戶界面層、業(yè)務(wù)邏輯層以及數(shù)據(jù)訪問(wèn)層。第一層為用戶服務(wù)層,用于提供一系列的請(qǐng)求以及訪問(wèn);第二層為業(yè)務(wù)邏輯層,用于處理用戶提出的請(qǐng)求并將之轉(zhuǎn)換傳輸?shù)降谌龑樱坏谌龑訛閿?shù)據(jù)訪問(wèn)層,負(fù)責(zé)對(duì)數(shù)據(jù)庫(kù)進(jìn)行一系列的操作以及對(duì)數(shù)據(jù)信息的存儲(chǔ)。
本文主要介紹基于安卓的系統(tǒng)設(shè)計(jì)中,在三層架構(gòu)的基礎(chǔ)上對(duì)通訊方式的分析與選擇,即當(dāng)用戶界面層與業(yè)務(wù)邏輯層、業(yè)務(wù)邏輯層和數(shù)據(jù)訪問(wèn)層以及數(shù)據(jù)訪問(wèn)層與數(shù)據(jù)庫(kù)之間進(jìn)行信息傳遞時(shí)需要的一種標(biāo)準(zhǔn)(即通訊方式)能夠完成他們之間的通信,使系統(tǒng)能夠正常的運(yùn)行。
2通訊方式的內(nèi)容
基于安卓的系統(tǒng)中可選的通訊方式有多種,本文采用三個(gè)最經(jīng)典,如今應(yīng)用最廣范以及最合適的三種通訊方式即(XML、JSON以及JAVA中自帶的對(duì)象序列化)進(jìn)行比較分析,并選擇最合適的通訊方式。
2.1XML
2.1.1XML簡(jiǎn)介
XML是一種可擴(kuò)展的標(biāo)記語(yǔ)言(Extensible markup Language),是一種平臺(tái)無(wú)關(guān)的表示數(shù)據(jù)的方法”。XML是從1996年建立其雛形,1998年二月十日被發(fā)布為W3C的標(biāo)準(zhǔn),前身為SGML,是依據(jù)HTML的發(fā)展經(jīng)驗(yàn)改編而來(lái)。因此,XML擁有HTML的很多優(yōu)點(diǎn),并且在極大程度上消除了HTML的缺點(diǎn)。XML與HTML的最大的區(qū)別在于XML是用來(lái)傳輸和存儲(chǔ)數(shù)據(jù),而HTML則是用來(lái)顯示數(shù)據(jù)。另外XML還擁有著類(lèi)似JAVA的平臺(tái)無(wú)關(guān)性的特點(diǎn),即用XML創(chuàng)建的內(nèi)容可以在任何平臺(tái)上讀取,其特點(diǎn)使之快速成為數(shù)據(jù)交換的唯一公共語(yǔ)言。
XML文檔由文檔類(lèi)型定義(DTD)、可擴(kuò)展樣式表語(yǔ)言XSL和可擴(kuò)展鏈接語(yǔ)言XLL三個(gè)要素組成。解析XML格式的數(shù)據(jù)的方式有很多種,DOM解析以及SAX解析是最常用的兩種。其中,DOM解析方式的原理為為XML文檔的已解析版本定義一組接口,解析器讀人整個(gè)文檔,然后構(gòu)建一個(gè)樹(shù)結(jié)構(gòu),代碼就可以使用這個(gè)DOM接口操作這個(gè)樹(shù)結(jié)構(gòu)。SAX解析方式的原理為當(dāng)解析器發(fā)現(xiàn)元素開(kāi)始、元素結(jié)束、文本、文檔的開(kāi)始或者結(jié)束時(shí),發(fā)送事件,程序員編寫(xiě)響應(yīng)這些事件的代碼,保存數(shù)據(jù)。
2.1.2XML的特點(diǎn)
(1)XML允許用戶自定義標(biāo)簽,具有擴(kuò)展功能,“擴(kuò)展性”就成為XML的一個(gè)中心特性。由于HTML擁有固定的標(biāo)簽來(lái)顯示數(shù)據(jù),因此在可擴(kuò)展性方面擁有很大的局限性。XML汲取了HTML的發(fā)展的經(jīng)驗(yàn),彌補(bǔ)了HTML在此方面的不足,允許用戶定義數(shù)量不限的標(biāo)記描述資料,使得用戶使用時(shí)具有更大的靈活性。
(2)識(shí)別文檔中的元素,使搜索具有智能性”。XML定義了各種標(biāo)識(shí)用來(lái)描述信息中的所有的元素,不僅改變了HTML固化的標(biāo)識(shí)集,而且改變了傳統(tǒng)信息的構(gòu)造方式,使得網(wǎng)絡(luò)傳輸在信息化檢索方面具有更加快捷的速度以及搜索內(nèi)容更加的精確。
(3)內(nèi)容與應(yīng)用程序分開(kāi),具有良好的復(fù)用性。XML文檔不涉及內(nèi)容如何顯示,只是簡(jiǎn)單地將文檔內(nèi)容解析成結(jié)構(gòu)化的數(shù)據(jù)傳送給應(yīng)用程序,這也使得XML能夠被不同的應(yīng)用程序使用。
(4)有嚴(yán)格的語(yǔ)法要求,具有良好的結(jié)構(gòu)性。XML的可擴(kuò)展性允許用戶可以自定義標(biāo)識(shí),但同樣對(duì)語(yǔ)法有著嚴(yán)格的要求。
2.2JSON
2.2.1JSON簡(jiǎn)介
JSON(JAVAScript object notation)是一種輕量級(jí)的數(shù)據(jù)交換格式,易于人閱讀和編寫(xiě),同時(shí)也易于機(jī)器解析與生成。它是基于ECMAScript的一個(gè)子集。JSON采用完全獨(dú)立于語(yǔ)言的文本格式存儲(chǔ)以及表示數(shù)據(jù),層次結(jié)構(gòu)簡(jiǎn)潔清晰,同時(shí)也包含了C語(yǔ)言、c++等一系列語(yǔ)言的習(xí)慣,這些特性使得JSON成為理想的數(shù)據(jù)交換語(yǔ)言.
JSON可以將JAVAScript對(duì)象中的一組數(shù)據(jù)轉(zhuǎn)換為字符串,然后在函數(shù)之間傳遞這個(gè)字符串,或者在異步應(yīng)用程序中將這個(gè)字符串從客戶端傳送到服務(wù)器端,JAVAScript也可以輕松的解析字符串,除此之外,JSON能夠表示復(fù)雜的結(jié)構(gòu)。因此,JSON非常適合傳輸數(shù)據(jù)庫(kù)的記錄類(lèi)型。解析json格式的數(shù)據(jù)也有多種,一般可以使用官方提供的JSONObject,也可以使用谷歌的開(kāi)源庫(kù)GSON,除此之外,一些第三方的開(kāi)源庫(kù)例如jaCkson、fastjson等也是不錯(cuò)的。
2.2.2 JSON的特點(diǎn)
(1)JSON的易用性強(qiáng)。即不用學(xué)習(xí)新的API,通過(guò)JAVAScript中的eva]()函數(shù)就可以解析JSON,獲得格式化的數(shù)據(jù),同時(shí)還為數(shù)據(jù)前臺(tái)的操作提供了便利。
(2)采用與編程無(wú)關(guān)陸,支持包括c語(yǔ)言、c#、java、java script以及PHP等多種服務(wù)器端語(yǔ)言,非常有利與服務(wù)器端的解析。
(3)因?yàn)镴SON代碼能夠直接為服務(wù)器端代碼使用,在極大程度上簡(jiǎn)化了服務(wù)器端以及客戶端的代碼的開(kāi)發(fā)量,且完成任務(wù)不變,同時(shí)大大減小了維護(hù)難度。
(4)JSON的通用性強(qiáng),可以在不同的移動(dòng)設(shè)備中使用,例如iOS、windows phone等等。
(5)JSON的數(shù)據(jù)格式比較簡(jiǎn)單,有利于進(jìn)行讀寫(xiě)操作。同時(shí),json的數(shù)據(jù)格式是壓縮的,因此所占用的帶寬相對(duì)較小。
2.3JAVA中的對(duì)象序列化
2.3.1對(duì)象序列化簡(jiǎn)介
序列化就是將對(duì)象的狀態(tài)轉(zhuǎn)換為可保存或者可傳輸?shù)母袷降倪^(guò)程,簡(jiǎn)單的說(shuō),序列化就是處理對(duì)象流的一種機(jī)制。但需要注意的是,對(duì)象序列化保存的是對(duì)象的狀態(tài),即它的成員變量。由此可見(jiàn),對(duì)象序列化不會(huì)關(guān)注類(lèi)中的靜態(tài)變量。所謂的對(duì)象流就是將對(duì)象的內(nèi)容進(jìn)行流化.然后可以對(duì)流化后的內(nèi)容進(jìn)行修改,也可以在各個(gè)網(wǎng)絡(luò)之間傳輸。序列化是為了解決在對(duì)對(duì)象流進(jìn)行讀寫(xiě)操作時(shí)可能引發(fā)的問(wèn)題。
Java自帶的對(duì)象序列化分為兩個(gè)部分即序列化和反序列化,序列化是將數(shù)據(jù)分解成字節(jié)流以便于存儲(chǔ)以及傳輸,反序列化則是將字節(jié)流重新轉(zhuǎn)換為對(duì)象。對(duì)象序列化的最主要的功能就是在傳遞以及保存對(duì)象時(shí),保持對(duì)象的完整性以及可傳傳遞性。
2.3.2對(duì)象序列化的特點(diǎn)
(1)對(duì)象序列化的繼承性:即如果某個(gè)類(lèi)能過(guò)被序列化,那么其子類(lèi)也可以被序列化,此為對(duì)象序列化的繼承性。但被聲明為static以及transient類(lèi)型的成員的數(shù)據(jù)不可序列化。其中,static代表類(lèi)的狀態(tài),transient代表類(lèi)的臨時(shí)數(shù)據(jù)。
(2)對(duì)象序列化的持久性:為了以后在某個(gè)時(shí)刻使用某個(gè)對(duì)象,希望把當(dāng)前對(duì)象的狀態(tài)保存下來(lái),以便于以后重建,并且重建后對(duì)象的內(nèi)容和當(dāng)前的對(duì)象的內(nèi)容一致。
(3)支持遠(yuǎn)程處理:可以將對(duì)象從一個(gè)應(yīng)用程序域傳輸?shù)搅硗庖粋€(gè)應(yīng)用程序域中。
(4)對(duì)象序列化允許重構(gòu):對(duì)象序列化允許有一定數(shù)量的類(lèi)變種,甚至重構(gòu)之后也是如此,objectinputstream依然可以很好的將其讀出來(lái)。
(5)對(duì)象序列化的不安全性:java序列化是將對(duì)象序列化為二進(jìn)制格式完全編寫(xiě)在文檔中,并且是完全可逆的,這對(duì)于安全陸方面有著不良影響。
(6)對(duì)象序列化允許將代理放在流中:很多情況下,類(lèi)中包含一個(gè)核心的數(shù)據(jù)元素,可以通過(guò)它派生或者找到列種的其他字段。在此情況下,沒(méi)有必要序列化整個(gè)對(duì)象??梢詫⒆侄螛?biāo)記為transient,但是每當(dāng)有方法訪問(wèn)一個(gè)字段時(shí),類(lèi)仍然必須顯式地產(chǎn)生代碼來(lái)檢查它是否被初始化。
3通訊方式的比較
(1)可讀性方面:JSON是建議的語(yǔ)法,XML是規(guī)范的標(biāo)簽形式,JSON和XML的可讀性不分上下,但是都優(yōu)于java對(duì)象序列化的二進(jìn)制格式;
(2)可擴(kuò)展性方面:XML有很好的擴(kuò)展性,JSON同樣也有,而且XML能擴(kuò)展的JSON都能擴(kuò)展;
(3)編碼難度方面:XML高于JSON以及java對(duì)象序列化。XML有豐富的編碼工具,比如Dom4j、JDom等,JSON也有JSON.org提供的工具,但是JSON的編碼明顯比XML容易許多,即使不借助工具也能寫(xiě)出JSON的代碼。但XML就相對(duì)困難得多。
(4)解碼難度方面:XML的解析需要考慮子節(jié)點(diǎn)以及父節(jié)點(diǎn),而JSON的解析難度幾乎可以忽略。
(5)流行度方面:雖然現(xiàn)在XML已經(jīng)被業(yè)界廣泛的使用,而JSON才剛剛開(kāi)始,但是在Ajax這個(gè)特定的領(lǐng)域,未來(lái)的發(fā)展一定是XML遜色于JSON;java序列化與java相比,java序列化不支持其他語(yǔ)言,導(dǎo)致其他語(yǔ)言無(wú)法反序列化,嚴(yán)重阻礙了他的應(yīng)用,但JSON卻能跨語(yǔ)言使用,高下立判。
(6)解析手段方面:JSON和XML同樣擁有豐富的解析手段。
(7)數(shù)據(jù)體積方面:JSON的數(shù)據(jù)的體積小,傳遞的速度更快些;XML文件格式龐大,格式繁雜;java使用時(shí)簡(jiǎn)單,但序列化后的碼流比較大,遠(yuǎn)大于二進(jìn)制編碼。
(8)傳輸速度方面:JSON的速度要遠(yuǎn)遠(yuǎn)快于XML,與java序列化不分上下。
(9)性能方面:JSON是一種通用的數(shù)據(jù)傳輸格式,各種語(yǔ)言和程序之間通用。而序列化只能java自己用。
4通訊方式的選擇
一方面,基于病人回訪系統(tǒng)的實(shí)例應(yīng)用,如果采用iava的對(duì)象序列化的通訊方式,由于java的對(duì)象序列化的不可跨語(yǔ)言性,要求客戶端必須是java平臺(tái),極大限制了系統(tǒng)的應(yīng)用;xml的解析方式又過(guò)于復(fù)雜,而且本文介紹的病人回訪系統(tǒng)前期是用在安卓的平臺(tái)上,到系統(tǒng)成熟時(shí)會(huì)逐漸向其他平臺(tái)發(fā)展,例如iOS平臺(tái)等等,從此方面來(lái)比較的話,JSON的跨平臺(tái)性顯然更適合。
相對(duì)于XML而言,JSON的可擴(kuò)展性高、速度遠(yuǎn)遠(yuǎn)快于XML、體積小、難度低以及具有較高的靈活性,除此之外JSON同樣適合iphone以及ipad等各種移動(dòng)設(shè)備;相對(duì)于JAVA再帶的序列化而言,JSON與語(yǔ)言無(wú)關(guān)、可跨語(yǔ)言使用、擴(kuò)展性強(qiáng)、速度亦不慢。因此,相對(duì)于XML以及java序列化而言,JSON更適合在基于安卓的系統(tǒng)中作為通訊方式。