賈順賀 陳建飛 陳古運 周 熠 張 勝
(南京郵電大學光電工程學院 江蘇 南京 210046)
隨著社會的發(fā)展,人們?nèi)找嬖鰪妼€人健康的重視,特別是在美國和日本這樣的發(fā)達國家。1973年,美國通過了健康維護法案,該法案使得健康維護和管理方面有了法律依據(jù)。在日本,各種先進的健康儀器和健康系統(tǒng)的開發(fā)也足以說明日本對個人健康的日益重視。雖然國內(nèi)對健康信息化的研究和發(fā)展起步較晚,但同樣發(fā)展迅速。2009年《健康檔案公用數(shù)據(jù)元(試行)》的編制對我們個人健康信息管理的開發(fā)和逐步推廣奠定了很好的理論和政策的保障?!督】禉n案公用數(shù)據(jù)元(試行)》旨在促進健康和醫(yī)療信息的數(shù)據(jù)共享和數(shù)據(jù)庫之間的數(shù)據(jù)同構化,以便規(guī)范化管理系統(tǒng)的開發(fā)和設計[1]。
目前國內(nèi)大多使用國外的健康管理系統(tǒng)產(chǎn)品,然而這些系統(tǒng)大多應用于醫(yī)院,康復中心等醫(yī)療機構,其中面向大眾的產(chǎn)品少之又少。并且這些系統(tǒng)功能單一,使用邏輯復雜,還無法滿足用戶的健康咨詢及建議需求,所以并非真正意義上的個人健康信息PHR(Personal Health Record)管理系統(tǒng)。個人健康信息管理系統(tǒng)作為一種新興的醫(yī)療信息管理模式,其主要目的是使用戶能自行管理與自身健康狀況密切相關的健康數(shù)據(jù)和醫(yī)療數(shù)據(jù)。
本文針對個人對管理自身健康數(shù)據(jù)和醫(yī)療數(shù)據(jù)的需求,對個人健康信息管理系統(tǒng)進行了需求分析;再根據(jù)分析報告開發(fā)了一個面向大眾、功能豐富的個人健康信息管理系統(tǒng);最后進行了系統(tǒng)運行效果驗證。該系統(tǒng)采用安全可靠的信息技術,不僅擁有及時、準確、可靠的信息傳輸和數(shù)據(jù)存儲能力,同時具有較高的可擴展、可移植和易維護等特性。
本文將個人健康信息管理系統(tǒng)用戶分為普通注冊用戶、服務提供者注冊用戶、系統(tǒng)管理員。除基本的用戶注冊、登錄、基本信息維護外,普通注冊用戶作為系統(tǒng)主要服務對象還需要系統(tǒng)為其提供健康檔案管理、健康數(shù)據(jù)管理、健康服務管理等功能模塊。服務提供者注冊用戶是指能為普通注冊用戶提供信息咨詢、健康評估、指導建議等內(nèi)容服務的提供者,例如醫(yī)生、護理人員和康復指導員等。系統(tǒng)管理員主要由用戶信息管理和角色權限管理兩個功能模塊組成[2-3]。功能分配如圖1所示。
圖1 系統(tǒng)功能分配圖
1.1.1健康檔案管理
個人健康信息管理系統(tǒng)作為一個PHR的管理平臺需要為個人用戶維護最基本的和完善的健康檔案信息。健康檔案應該符合國家標準、信息覆蓋全面、實現(xiàn)全生命的特性管理[4]。
1.1.2健康數(shù)據(jù)管理
注冊用戶除了可以查詢自己的健康檔案信息外,還可以通過系統(tǒng)維護自己的個人基本資料、查詢診療信息等。一般來說,整個平臺的核心任務是數(shù)據(jù)存儲。個人健康信息管理系統(tǒng)需要把匯集各地方的個人健康信息數(shù)據(jù)資源到該平臺上,然后實現(xiàn)健康數(shù)據(jù)的管理、存儲與共享。由于系統(tǒng)之間的不同使得健康信息數(shù)據(jù)是異構的,因此系統(tǒng)需要統(tǒng)一標準對健康數(shù)據(jù)進行重構后再存儲。
1.1.3健康服務管理
注冊用戶可以查找到已注冊服務提供者,同時系統(tǒng)還應為用戶提供咨詢、預約、權限授予等功能。例如,當用戶查找并預約到醫(yī)療機構就診時,可以通過管理系統(tǒng)授權醫(yī)務人員調(diào)閱健康檔案、查閱過往診療信息、制定健康計劃、評估健康風險等權利,從而使得醫(yī)務人員可以為注冊用戶提供更好的醫(yī)療服務。
除核心功能中,個人健康信息管理系統(tǒng)還為普通注冊用戶提供了健康知識科普、就醫(yī)信息推薦、投訴與建議等周到細致的服務。
1.2.1信息咨詢
當普通注冊用戶向服務提供者發(fā)送咨詢,服務提供者接收到咨詢信息后可以查看普通注冊用戶的性別、年齡、身高、體重、血壓等基本信息用于對咨詢做出基本反饋或建議。服務提供者反饋咨詢信息后可以做出相應信息記錄以便提高日后對同一普通注冊用戶的反饋效率。
1.2.2健康評估
服務提供者在接待普通注冊用戶后,登錄系統(tǒng)并完成來訪者基本信息錄入和來訪原由,并可通過使用健康評估功能對來訪者進行評估診斷。健康評估主要包括:現(xiàn)今健康狀態(tài)、健康發(fā)展趨勢和愈合恢復能力等評估內(nèi)容。
1.2.3指導建議
服務提供者在完成病因診斷和健康評估后,可通過使用健康指導功能,針對性的進行健康指導。如飲食注意事項、休息睡眠注意事項及其他可能事項。
1.3.1用戶信息管理
系統(tǒng)管理員登錄后可對注冊用戶信息進行管理,包括用戶基本信息的修改、用戶意見反饋、垃圾數(shù)據(jù)清理和服務提供者信息認證等。
1.3.2角色權限管理
系統(tǒng)管理員登錄系統(tǒng)后,使用查找功能,可以查詢服務提供者賬號、密碼、權限級別等信息;使用授權功能,可以對服務提供者賬號進行權限更改;使用刪除功能,可以對服務提供者賬號進行刪除等操作。
除基本功能性要求外,個人健康信息管理系統(tǒng)作為一個服務門戶網(wǎng)站應該具有以下特性:
可靠性:在系統(tǒng)運行期間,應當保證用戶數(shù)據(jù)安全,一旦出現(xiàn)數(shù)據(jù)操作異常,應當及時做出數(shù)據(jù)回滾、備份恢復或垃圾數(shù)據(jù)清理等操作予以補救。
可擴展性:Web 應用應當可以為其他平臺客戶端提供訪問接口,并實現(xiàn)數(shù)據(jù)與業(yè)務控制分離,保證數(shù)據(jù)導入不會影響業(yè)務。
易維護性:系統(tǒng)設計開發(fā)過程中應遵循高內(nèi)聚低耦合的設計原則,并提供數(shù)據(jù)遷移、導入等功能,以保證后期維護便捷。
為保證系統(tǒng)后期的可擴展性以及可維護性,本系統(tǒng)采用基于J2EE 平臺的MVC模式開發(fā),達到降低應用程序耦合性的目的。MVC,即模型、視圖、控制器的首字母,它把應用程序抽象為功能截然不同的三部分[5]。MVC結(jié)構如圖2所示。
圖2 MVC結(jié)構圖
模型層主要負責封裝數(shù)據(jù)、提供接口和執(zhí)行操作等。模型層主要作用是通過控制層為多個視圖提供數(shù)據(jù)。
視圖層主要負責將模型層的數(shù)據(jù)顯示給用戶,并實現(xiàn)用戶與系統(tǒng)的交互。
控制層主要負責連接視圖層與模型層。用戶在界面中進行的操作,如點擊按鈕、輸入文本等,控制層會按照設定的規(guī)則將用戶輸入的信息寫入模型層,或者修改模型層的數(shù)據(jù),另外決定呈現(xiàn)給用戶哪些界面。
使用 MVC 模式的目的是實現(xiàn)系統(tǒng)代碼的模型,控制器和視圖分離。模型層與視圖層分離的使得系統(tǒng)擁有不同的表達形式,其中一層發(fā)生需要改動時,其他各層基本不需要做出大面積修改,這樣就可以增加管理系統(tǒng)的可維護性。
下面介紹運用SSH 框架實現(xiàn) MVC 架構的個人健康信息管理系統(tǒng)的實現(xiàn)過程及方法。使用Struts、Spring和Hibernate 集成SSH框架分別實現(xiàn)表現(xiàn)層、業(yè)務層和持久層。分層設計方法的使用可以使每層中只集中解決特定的問題,有利于最大限度發(fā)揮框架的作用,同時降低層與層間的耦合關系。系統(tǒng)結(jié)構如圖3所示。
圖3 系統(tǒng)結(jié)構圖
系統(tǒng)工作流程描述如下:
客戶端發(fā)出Http 請求,該請求將在系統(tǒng)中經(jīng)過一系列的過濾器(Filter)到達Struts 中的FilterDispatcher 控制器。FilterDispatcher控制器再把請求交給ActionProxy代理進行處理。代理通過Struts.xml配置文件找到需要調(diào)用的Action類。在調(diào)用Action的過程中,還會伴有相關攔截器調(diào)用。最后Action Servlet將 Http請求一次轉(zhuǎn)發(fā)給其他相關頁面實現(xiàn)響應。
Spring主要負責類的實例化,包括Struts 的中 Action、Service、DAO 類和Hibernate 數(shù)據(jù)源等類,同時還有添加事務處理等功能[8]。Spring利用 Spring的控制反轉(zhuǎn)IoC(Inversion of Control)容器整合表現(xiàn)層、業(yè)務層和持久層,使用面向方面編程AOP(Aspect-Oriented Programming)實現(xiàn)DAO類的事務控制。
作為一個用戶服務型系統(tǒng),數(shù)據(jù)的持久化( Persistence) 是整個系統(tǒng)中最為關鍵的一個環(huán)節(jié)。持久化是把數(shù)據(jù)保存的存儲設備中,并將數(shù)據(jù)使用者和數(shù)據(jù)實體相關聯(lián)。Hibernate 是實現(xiàn)持久層的框架,Hibernate通過Configration類解析hibernate.cfg.xml配置文件及映射文件中的信息。同時應用這些信息生成一個SessionFactory工廠對象用于生成Session對象。通過Session對象的get()、load()、save()和update()等方法,對持久化對象PO(Persistent Object)進行加載、保存、更新、刪除等操作。在查詢的情況下, Session對象將生成一個Query對象執(zhí)行查詢操作。最后如果沒有異常,負責事務的Transaction對象將提交這些操作結(jié)果到數(shù)據(jù)庫中,完成持久化過程[8]。
2.3.1用戶信息(users)數(shù)據(jù)表設計
作為健康類服務系統(tǒng),系統(tǒng)開發(fā)過程中把血型、體重、身高等最為基本的健康數(shù)據(jù)作為基本信息進行考慮。因此用于存儲用戶基本信息資料的數(shù)據(jù)表包括如表1所示數(shù)據(jù)。
表1 users信息表
2.3.2用戶信息(users)數(shù)據(jù)表創(chuàng)建
考慮到系統(tǒng)后期維護、擴展和升級操作,在創(chuàng)建數(shù)據(jù)時使用MySQL的標準SQL語句的方式創(chuàng)建數(shù)據(jù)庫。同時為了更好地兼容中文字符,數(shù)據(jù)庫采用 utf-8 編碼。
創(chuàng)建health數(shù)據(jù)庫:
DROP DATABASE IF EXISTS health;
CREATE DATABASE health DEFAULT CHARACTER SET utf8;
創(chuàng)建users數(shù)據(jù)表:
USE health;
DROP TABLE IF EXISTS user;
CREATE TABLE user
(
uid bigint NOT NULL AUTO_INCREMENT,
uname VARCHAR(48) UNIQUE KEY,
name VARCHAR(48) NOT NULL,
password VARCHAR(48) NOT NULL,
sex VARCHAR(24) NOT NULL,
birthday VARCHAR(24) NOT NULL,
weight VARCHAR(24),
height VARCHAR(24),
bloodtype VARCHAR(24),
phone VARCHAR(24) UNIQUE KEY,
phone2 VARCHAR(24),
diploma VARCHAR(24) ,
email VARCHAR(48) UNIQUE KEY,
address VARCHAR(48) NOT NULL,
marry VARCHAR(24) ,
createtime VARCHAR(24) NOT NULL,
role VARCHAR(24) NOT NULL,
illhistory VARCHAR(48) ,
note VARCHAR(128),
CONSTRAINT pk_user PRIMARY KEY (uid)
);
2.3.3單點登錄的實現(xiàn)
單點登錄SSO(Single Sign On)是在多個應用系統(tǒng)中,用戶僅需一次登錄就可以訪問其他所有授信應用系統(tǒng)的登錄機制[9]。開發(fā)過程中一般使用Session或者Cookie來保存用戶狀態(tài),然后Session容易丟失和引起并發(fā)問題,Cookie則容易暴露用戶信息。所以本系統(tǒng)開發(fā)過程中使用Redis來解決以上問題。
登錄的處理流程如圖4所示:用戶在登錄頁面提交用戶名和密碼。系統(tǒng)對用戶名和密碼進行驗證,登錄成功后生成token,并把用戶信息保存到Redis。保存過程中Key就是token,value就是use對象轉(zhuǎn)換成json。然后使用String類型保存Session信息,可以使用“前綴:token”為key,并設置key的過期時間來模擬Session的過期時間。最后把token寫入Cookie中,Cookie在關閉瀏覽器時失效。
圖4 登錄處理流程圖
當已登錄用戶發(fā)出頁面請求時,系統(tǒng)從Cookie中取出token,并在Redis中進行查詢。如果查詢到token對應用戶信息則返回請求頁面,否則跳轉(zhuǎn)到用戶登錄界面。
系統(tǒng)測試是系統(tǒng)開過的最后一步,也是保證系統(tǒng)質(zhì)量和可靠性的關鍵步驟,本系統(tǒng)在開發(fā)過程中進行了單元測試和功能性測試。單元測試主要測試了代碼邏輯和基礎功能模塊的正確性。功能性測試主要通過人工模擬用戶使用過程,進行功能完整性測試,包括Cookies測試、鏈接測試、表單測試和數(shù)據(jù)庫測試等。最后,在保存功能性完整前提下進行了性能測試。
測試環(huán)境如表2所示。
表2 測試環(huán)境
在系統(tǒng)性能測試過程中,利用系統(tǒng)響應時間和丟包率兩個指標來對系統(tǒng)的并發(fā)性能、響應客戶的性能進行測試。限于網(wǎng)絡環(huán)境和服務器性能對性能指標有較大影響,測試過程中的網(wǎng)絡環(huán)境選定為學校內(nèi)部網(wǎng)絡,服務器為擁有全新系統(tǒng)的單機服務器和具有兩個單機服務器的集群,測試工具為Mercury LoadRunner。利用Mercury LoadRunner制造并發(fā)訪問,對單服務器環(huán)境下的系統(tǒng)和具有兩個服務器的集群環(huán)境下的系統(tǒng)進行性能測試,并對記錄數(shù)據(jù)進行整理得到結(jié)果如圖5、圖6所示。
圖5 單服務器環(huán)境測試結(jié)果
圖6 集群環(huán)境測試結(jié)果
由測試結(jié)果可以看出,在單服務器環(huán)境下當并發(fā)量為400時系統(tǒng)響應時間和丟包率開始有明顯變化,在具有兩個服務器的集群環(huán)境下當并發(fā)量為700時系統(tǒng)響應時間和丟包率開始有明顯變化。所以在單機服務器環(huán)境下最接近該系統(tǒng)的并發(fā)服務數(shù)量應為400,在具有兩個服務器的集群環(huán)境下最接近該系統(tǒng)的并發(fā)服務數(shù)量應為700。測試結(jié)果表明,該系統(tǒng)性能能夠滿足預計需求,在多系統(tǒng)環(huán)境下可以復用,通過后期擴展可進一步提升性能。
最后通過更換MySQL數(shù)據(jù)庫為PostgreSQL數(shù)據(jù)庫后重復上述測試,測試結(jié)果同更換前測試結(jié)果基本一致,進一步說明系統(tǒng)同時具有較好的可移植性和易維護性。
圖7是部分關鍵界面運行效果圖。
圖7 用戶主界面
本文通過分析國內(nèi)外目前健康管理的現(xiàn)狀,結(jié)合我國國情確定設計并實現(xiàn)了一個基于MVC架構的個人健康信息管理系統(tǒng)。本文通過對系統(tǒng)的功能需求進行分析后,把管理系統(tǒng)的用戶分為普通注冊用戶,服務提供者注冊用戶和系統(tǒng)管理員。同時根據(jù)用戶類別細化了功能性需求,以便后期的功能開發(fā)和測試。為了使模塊劃分方面完全滿足高內(nèi)聚、低耦合的特點,在系統(tǒng)架構設計和開發(fā)過程中使用了MVC架構思想。Struts、Spring和Hibernate三大主流框架的使用也極大地提升了系統(tǒng)在可維護性和擴展性。最后對各個模塊進行了全面單元測試、功能性測試和性能測試,以保證系統(tǒng)能夠滿足用戶在功能上和性能上的需求。
[1] 中華人民共和國衛(wèi)生部衛(wèi)生信息標準專業(yè)委員會.健康檔案公用數(shù)據(jù)元標準(試行)[S].2009.
[2] 馮丹,周游,姚遠,等.我國居民健康檔案基本數(shù)據(jù)集數(shù)據(jù)元目錄編制[J].中國衛(wèi)生信息管理雜志,2012,9(1):71-74.
[3] 中華人民共和國國家衛(wèi)生和計劃生育委員會.基于健康檔案的區(qū)域衛(wèi)生信息平臺建設指南( 試行 )[EB/OL].http://www.moh.gov.cn/cmsresources/wsb/cmsrsdocument/doc4513.doc.
[4] 孫強.檔案利用中的個人隱私保護問題探析[J].檔案學研究,2014(4):40-43.
[5] Li H,Zhou M,Xu G J,et al.Aspect-Oriented Programming for MVC Framework[C]//International Conference on Biomedical Engineering and Computer Science.IEEE,2010:1-4.
[6] 林子雨,鄒權,賴永炫,等.關系數(shù)據(jù)庫中的關鍵詞查詢結(jié)果動態(tài)優(yōu)化[J].軟件學報,2014,25(3):528-546.
[7] Chen W.Enterprise information management system based on J2EE and MVC mode[C]//Proceedings of the 9th International Symposium on Linear Drives for Industry Applications,2014,3:427-433.
[8] 彭霞,朱萍.MVC模式高??蒲泄芾砥脚_構建方案[J].計算機技術與發(fā)展,2013(4):249-253.
[9] 陳淥漪,管小清.單點登錄(SSO)系統(tǒng)的設計與實現(xiàn)[J].電腦知識與技術:學術交流,2008,3(7):1457-1459,1466.
[10] 黃少濱,楊欣欣,申林山,等.高階異構數(shù)據(jù)模糊聯(lián)合聚類算法[J].通信學報,2014,35(6):15-24.
[11] 丁亮,許舒人.基于SSH框架的Java代碼自動生成[J].計算機系統(tǒng)應用,2014,23(9):72-77.
[12] 徐小龍,劉笑笑.面向移動計算環(huán)境的混合式數(shù)據(jù)同步機制[J].通信學報,2016,37(8):1-12.