駱鵬傲
徐州醫(yī)學(xué)院醫(yī)學(xué)信息學(xué)院,江蘇 徐州 221004
醫(yī)院信息系統(tǒng)(hospital information system,HIS)是目前最為復(fù)雜的軟件系統(tǒng)之一,開(kāi)發(fā)此系統(tǒng)時(shí)進(jìn)行可視化建模十分重要。在我們構(gòu)建軟件項(xiàng)目的開(kāi)發(fā)周期中,系統(tǒng)建模是整個(gè)軟件開(kāi)發(fā)中重要和關(guān)鍵的一步。
UML(unified modeling language)又稱(chēng)統(tǒng)一建模語(yǔ)言或標(biāo)準(zhǔn)建模語(yǔ)言,是一種面向?qū)ο蟮慕UZ(yǔ)言,它是運(yùn)用統(tǒng)一的、標(biāo)準(zhǔn)化的標(biāo)記和定義實(shí)現(xiàn)對(duì)軟件系統(tǒng)進(jìn)行面向?qū)ο蟮拿枋龊徒?。UML是一個(gè)支持模型化和軟件系統(tǒng)開(kāi)發(fā)的圖形化語(yǔ)言,它為軟件開(kāi)發(fā)的所有階段提供模型化和可視化支持。該課題的開(kāi)發(fā)正是采用基于UML的面向?qū)ο蟮拈_(kāi)發(fā)技術(shù)。
UML是面向?qū)ο蠓治龊驮O(shè)計(jì)(OOA&D)的方法,它統(tǒng)一了Booch、Rumbaugh、Jacobson的表示方法,而且對(duì)其作了進(jìn)一步的發(fā)展,其優(yōu)勢(shì)可以歸結(jié)為以下三點(diǎn)[1-2]:
①UML統(tǒng)一了Booch、OMT和OOSE等方法中的基本概念;
②UML還吸取了面向?qū)ο蠹夹g(shù)領(lǐng)域中其他流派的長(zhǎng)處,其中也包括非OO方法的影響;
③UML在演變過(guò)程中還提出了模板(Stereotypes)、職責(zé)(Responsibilities)、擴(kuò)展機(jī)制(Extensibility mechanisms)、分布式(Distribution)、并發(fā)(Concurrency)等概念。
1.1.1 建模機(jī)制 任何建模語(yǔ)言都以靜態(tài)建模機(jī)制[1,3-4]為基礎(chǔ),UML 也不例外。UML 的靜態(tài)建模機(jī)制包括用例圖(Use Case diagram)、類(lèi)圖(Classdia gram)、對(duì)象圖(Object diagram)、組件圖(Component diagram)和配置圖(Deployment diagram)。
系統(tǒng)建模不僅要描述靜態(tài)結(jié)構(gòu),同時(shí)要描述系統(tǒng)的行為,也就是描述所建立的模型是否可以執(zhí)行或者執(zhí)行時(shí)的時(shí)序狀態(tài)和其交互關(guān)系。其中,主要用狀態(tài)圖(State diagram)、活動(dòng)圖(Active diagram)、順序圖(Sequence diagram)、協(xié)作圖(Collaboration diagram)四個(gè)圖形來(lái)表現(xiàn),亦把此稱(chēng)為標(biāo)準(zhǔn)建模語(yǔ)言UML的動(dòng)態(tài)建模機(jī)制[1,3-4]。
1.1.2 建模方法 UML首先通過(guò)建立一系列的用例圖,對(duì)系統(tǒng)功能進(jìn)行分析,并以活動(dòng)者與用例之間的關(guān)系表示系統(tǒng)用戶(hù)對(duì)系統(tǒng)功能的要求,從而以圖形化的方式簡(jiǎn)潔明了地分析系統(tǒng)的要求。UML使用活動(dòng)圖對(duì)此進(jìn)行建模[5-6]。
在詳細(xì)設(shè)計(jì)階段,UML根據(jù)交互視圖、狀態(tài)視圖以及活動(dòng)圖內(nèi)的系統(tǒng)詳細(xì)信息,在概要設(shè)計(jì)的基礎(chǔ)上,設(shè)計(jì)出各個(gè)類(lèi)應(yīng)具有的屬性以及方法,并進(jìn)一步確定各個(gè)類(lèi)之間的關(guān)系。最后,在編碼實(shí)現(xiàn)階段,只要選擇一種面向?qū)ο蟮恼Z(yǔ)言,按照這種語(yǔ)言的要求將詳細(xì)設(shè)計(jì)的結(jié)果模型實(shí)現(xiàn)。其分析過(guò)程主要模型及相互關(guān)系如圖1所示(虛線框圖表示分析結(jié)果,實(shí)線框圖表示設(shè)計(jì)過(guò)程中的結(jié)果,箭頭表示驅(qū)動(dòng)關(guān)系)。
圖1 分析過(guò)程主要模型及相互關(guān)系圖
因?yàn)樵撓到y(tǒng)采用的是Oracle關(guān)系數(shù)據(jù)庫(kù)[7],而我們的模型是基于面向?qū)ο蟮?,因此要解決對(duì)象—關(guān)系數(shù)據(jù)庫(kù)之間的映射問(wèn)題。正如前面所討論的,對(duì)于簡(jiǎn)單的對(duì)象,我們可以直接把屬性映射為數(shù)據(jù)庫(kù)中的域,同時(shí)對(duì)域加入約束。例如:門(mén)診排班、劃價(jià)明細(xì)等對(duì)象,就可采用此方法一一映射為數(shù)據(jù)庫(kù)的表。如果對(duì)于存在繼承關(guān)系的復(fù)雜類(lèi),我們所采用的映射方式是將整個(gè)類(lèi)層次映射為單個(gè)表。例如:存在病員類(lèi)、醫(yī)保類(lèi)和自費(fèi)病員類(lèi),其中醫(yī)保和自費(fèi)病員類(lèi)均為繼承病員類(lèi),這時(shí)我們所采用的映射方法為把病員類(lèi)、自費(fèi)、醫(yī)保類(lèi)中的所有屬性映射為病員表中的域,同時(shí)增加一個(gè)費(fèi)用類(lèi)別字段,以區(qū)別病員類(lèi)別。
醫(yī)院管理信息系統(tǒng)是一個(gè)典型的7×24小時(shí)連續(xù)不間斷系統(tǒng),系統(tǒng)一旦運(yùn)行,整個(gè)醫(yī)院的業(yè)務(wù)將依賴(lài)于該系統(tǒng),基于管理及信息量大及實(shí)時(shí)數(shù)據(jù)傳遞等特殊要求,對(duì)系統(tǒng)及網(wǎng)絡(luò)的性能有較高的要求。系統(tǒng)設(shè)計(jì)時(shí)按照軟件工程學(xué)的范疇嚴(yán)格遵循以下原則:
①開(kāi)放性和可擴(kuò)充性;②先進(jìn)性;③高可靠性、安全性;④可維護(hù)性。
醫(yī)院網(wǎng)絡(luò)是一套綜合的信息系統(tǒng),而且醫(yī)院的需求和各種數(shù)據(jù)在不停地變化,因此要求整個(gè)系統(tǒng)具有良好的可管理性,在界面上做到直觀清晰,并提供詳盡完善的技術(shù)手冊(cè),方便系統(tǒng)維護(hù)。
針對(duì)醫(yī)院對(duì)HIS的系統(tǒng)要求,根據(jù)衛(wèi)生部“醫(yī)院信息系統(tǒng)基本功能規(guī)范”,經(jīng)過(guò)仔細(xì)分析調(diào)研與論證,我們將HIS分為業(yè)務(wù)管理模塊和臨床信息模塊。其中,業(yè)務(wù)管理模塊包括:門(mén)診患者管理掛號(hào)劃價(jià)收費(fèi)模塊、藥庫(kù)藥房管理模塊、住院管理模塊、護(hù)士信息管理工作站模塊、財(cái)務(wù)管理與醫(yī)院經(jīng)濟(jì)核算模塊和院長(zhǎng)辦公綜合查詢(xún)與輔助決策支持模塊;臨床信息模塊包括:醫(yī)學(xué)影像圖片信息模塊、檢查檢驗(yàn)信息模塊、電子病歷模塊和遠(yuǎn)程專(zhuān)家模塊。
HIS系統(tǒng)功能模塊如圖2所示。
圖2 HIS系統(tǒng)功能模塊圖
通過(guò)對(duì)醫(yī)院醫(yī)護(hù)人員和相關(guān)行政人員調(diào)研,根據(jù)醫(yī)院有關(guān)門(mén)診管理的業(yè)務(wù)流程,基于UML使用面向?qū)ο蠓治龇椒▽?duì)門(mén)診系統(tǒng)進(jìn)行分析,得出系統(tǒng)的初步用例模型如圖3所示。
圖3 系統(tǒng)分析初期用例模型
用例圖很好地描述了系統(tǒng)功能或是目標(biāo),但是卻很難描述系統(tǒng)中存在對(duì)象及其對(duì)象的交互,而UML中的順序圖則在這方面給予補(bǔ)充描述。掛號(hào)用例場(chǎng)景中我們已經(jīng)提到進(jìn)行門(mén)診掛號(hào)的角色是門(mén)診操作員,病員只有通過(guò)他才能與系統(tǒng)交互。操作員向邊界類(lèi)(窗口)發(fā)出消息,進(jìn)行查看病員信息或是添加病員信息,然后返回門(mén)診掛號(hào)信息及病員主要信息,操作員再向邊界類(lèi)發(fā)出查看坐診記錄信息,坐診記錄對(duì)象完成查詢(xún)?nèi)蝿?wù)返回,根據(jù)病員的意見(jiàn)進(jìn)行掛號(hào)并創(chuàng)建掛號(hào)單,同時(shí)根據(jù)設(shè)置的掛號(hào)費(fèi)用對(duì)病員進(jìn)行收費(fèi),創(chuàng)建發(fā)票對(duì)象,發(fā)票對(duì)象向后臺(tái)數(shù)據(jù)庫(kù)發(fā)出記帳消息,后臺(tái)數(shù)據(jù)庫(kù)進(jìn)行記帳,成功后返回成功信息,打印出發(fā)票及掛號(hào)單返回操作員,然后交給病員。掛號(hào)用例場(chǎng)景順序圖如圖4所示。
圖4 掛號(hào)用例場(chǎng)景順序圖
數(shù)據(jù)服務(wù)層通常是應(yīng)用程序中靜態(tài)特性最強(qiáng)的層,與邏輯業(yè)務(wù)層相比,數(shù)據(jù)結(jié)構(gòu)很少受到改變的影響,因此對(duì)此層我們考慮的較少,當(dāng)然我們也必須建立表單和設(shè)計(jì)表。但是,與數(shù)據(jù)相關(guān)的數(shù)據(jù)訪問(wèn)經(jīng)常發(fā)生,此類(lèi)數(shù)據(jù)通常放在數(shù)據(jù)庫(kù)中。為了實(shí)現(xiàn)的便捷,我們有時(shí)會(huì)把數(shù)據(jù)服務(wù)層進(jìn)一步的劃分,將對(duì)數(shù)據(jù)的邏輯請(qǐng)求從物理訪問(wèn)技術(shù)中分離處理。使用良好面向?qū)ο蟮脑O(shè)計(jì)概念來(lái)構(gòu)建應(yīng)用程序可以進(jìn)一步分離這些層[8-9]。
中間層就是應(yīng)用邏輯層,這一層動(dòng)態(tài)性很強(qiáng)。在本開(kāi)發(fā)中,中間層開(kāi)發(fā)主要采用基于組件開(kāi)發(fā)模式。組件是軟件、模塊包或子系統(tǒng)的一個(gè)重要部分,它是概要設(shè)計(jì)在物理上的實(shí)現(xiàn),組件的開(kāi)發(fā)與面向?qū)ο蟮拈_(kāi)發(fā)是密不可分的[10]。
在這一層中包含了前面所討論的多數(shù)實(shí)體類(lèi)。開(kāi)始時(shí),每個(gè)執(zhí)行結(jié)構(gòu)將對(duì)類(lèi)圖中定義的屬性作鏡像,對(duì)每個(gè)屬性將有Get和Set操作,并且所有的屬性都將聲明為私有的屬性,并為每個(gè)實(shí)體類(lèi)將提供一些服務(wù),例如請(qǐng)求檢索自身的信息[11]。同時(shí),這些類(lèi)還必須能夠響應(yīng)更新的請(qǐng)求,因此對(duì)一些表單的永久管理可以由應(yīng)用程序中的其他層完成。因此,在此層中不僅有和用戶(hù)界面層的通信,而且還有與數(shù)據(jù)庫(kù)訪問(wèn)層間的通信。
此層的實(shí)現(xiàn)也稱(chēng)為用戶(hù)界面設(shè)計(jì)。用戶(hù)界面層的設(shè)計(jì),一般采用的是原型法。原型作為對(duì)項(xiàng)目參與者來(lái)說(shuō)是一個(gè)非常好的演示工具。用戶(hù)界面的設(shè)計(jì)是一項(xiàng)復(fù)雜的任務(wù),需要廣泛的技能來(lái)支持。用戶(hù)界面設(shè)計(jì)需要遵循如下的設(shè)計(jì)原則[12]:①結(jié)構(gòu)原則;②簡(jiǎn)化原則;③可見(jiàn)性原則;④反饋原則;⑤設(shè)計(jì)標(biāo)準(zhǔn)并堅(jiān)持使用;⑥合理使用顏色;⑦不要?jiǎng)?chuàng)建擁擠的用戶(hù)界面。
我們將類(lèi)型層次化,前面的類(lèi)和接口的建模其本質(zhì)就是對(duì)業(yè)務(wù)/領(lǐng)域類(lèi)和處理類(lèi)進(jìn)行建模。對(duì)于該系統(tǒng)來(lái)說(shuō),用戶(hù)界面由可視化很強(qiáng)的軟件開(kāi)發(fā),因此,完全可以使用用戶(hù)界面流程圖來(lái)說(shuō)明,如圖5所示。
圖5 用戶(hù)界面流程圖
2.6.1 病員信息錄入界面 在病員信息錄入界面為便于用戶(hù)錄入,日期、民族、費(fèi)別、市縣、省份等字段為有限可選,因此提供下拉按鈕進(jìn)行選擇。對(duì)于病員如果不想提供詳細(xì)信息,那么只需點(diǎn)擊基本信息按鈕則屏蔽掉。病員信息錄入界面如圖6所示。
圖6 病員信息錄入界面圖
2.6.2 掛號(hào)界面 在掛號(hào)界面中,首先選擇病員:若為自費(fèi)患者,按快捷鍵F6自動(dòng)選擇病歷卡,在卡號(hào)欄中錄入正確的病歷卡號(hào)就會(huì)自動(dòng)從病員信息庫(kù)中檢索出病員信息;若為醫(yī)?;颊邉t單擊F7,自動(dòng)讀取醫(yī)???,檢索出醫(yī)保患者的信息。選擇初診復(fù)診狀態(tài):選擇初診自動(dòng)加收病歷工本費(fèi)。對(duì)于科室和醫(yī)師的選擇:在科室欄中錄入科室的拼音碼或五筆碼回車(chē),右部列表中會(huì)自動(dòng)顯示當(dāng)班科室和專(zhuān)家的信息,使用上下箭頭選擇。選擇完畢,會(huì)自動(dòng)根據(jù)不同的科室或?qū)<疑上嚓P(guān)的費(fèi)用。在左側(cè)欄中顯示掛號(hào)名稱(chēng)和費(fèi)別,當(dāng)點(diǎn)擊右下方掛號(hào)按鈕時(shí),在界面下方顯示總合計(jì)。掛號(hào)界面如圖7所示。
圖7 掛號(hào)界面圖
2.6.3 劃價(jià)收費(fèi)界面 在劃價(jià)收費(fèi)界面中,若選擇的“卡類(lèi)別”是病歷卡,輸入卡號(hào),按回車(chē)鍵,如果病員存在,顯示患者姓名、費(fèi)別;若不存在則顯示錯(cuò)誤信息,對(duì)于科室和醫(yī)師,則根據(jù)下拉菜單進(jìn)行選擇。界面中部為藥品明細(xì)輸入窗口,同樣可在“類(lèi)別”和“名稱(chēng)”輸入欄輸入拼音碼或五筆碼快速選擇。根據(jù)藥品的名稱(chēng)則自動(dòng)彈出單價(jià),單價(jià)不可輸入和更改,當(dāng)輸入數(shù)量時(shí),則自動(dòng)產(chǎn)生金額。劃價(jià)收費(fèi)界面如圖8所示。
圖8 劃價(jià)收費(fèi)界面
2.6.4 病員發(fā)票查詢(xún)界面實(shí)現(xiàn) 在病員發(fā)票查詢(xún)界面中,可根據(jù)用戶(hù)的需求進(jìn)行定向查詢(xún),如根據(jù)病員ID、根據(jù)卡類(lèi)別、卡號(hào)、姓名及其使用姓名五筆碼或拼音碼進(jìn)行簡(jiǎn)單查詢(xún),同時(shí)根據(jù)查詢(xún)結(jié)果選擇是否查看詳細(xì)信息還是進(jìn)行信息修改。
基于UML的面向?qū)ο蠼J窃撥浖_(kāi)發(fā)的一個(gè)亮點(diǎn)。使用.NET平臺(tái)的可視化開(kāi)發(fā)界面友好且控件豐富。醫(yī)院管理信息系統(tǒng)的成功運(yùn)行證明了統(tǒng)一建模語(yǔ)言可以滿(mǎn)足醫(yī)院系統(tǒng)的復(fù)雜要求,在開(kāi)發(fā)過(guò)程中,進(jìn)一步體會(huì)到了面向?qū)ο蠹夹g(shù)復(fù)用性高、可維護(hù)性好的特點(diǎn)。但在系統(tǒng)設(shè)計(jì)中也存在一定的問(wèn)題,這就需要我們?cè)谝院蟮膽?yīng)用中不斷改進(jìn)和提高。
[1]劉超,張莉.可視化面向?qū)ο蠼<夹g(shù)-標(biāo)準(zhǔn)建模語(yǔ)言UML教程[M].北京:航空航天大學(xué)出版社,1999:39-44
[2]Roff J.UML 基礎(chǔ)教程[M].北京:清華大學(xué)出版社,2008:131-139
[3]蔣慧,吳禮發(fā).UML Programming Guide設(shè)計(jì)核心技術(shù)[M].北京:希望電子出版社,2011:149-161
[4]Joseph Schmuller.UML 基礎(chǔ)、案例與應(yīng)用[M].北京:人民郵電出版社,2002:81-85
[5]歐陽(yáng)明.Client/Server體系結(jié)構(gòu)發(fā)展[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,1997,12(11):50-52
[6]王燦輝.用三層模式開(kāi)發(fā)計(jì)算機(jī)等級(jí)考試系統(tǒng)[J].福州大學(xué)學(xué)報(bào),2010,(5)::87-90
[7]馮凱,劉占書(shū),崔毅.談醫(yī)院數(shù)據(jù)庫(kù)從8i到10g升級(jí)的步驟和方法[J].中國(guó)醫(yī)學(xué)教育技術(shù),2010,24(1):45-46
[8]宗梅,馬小平.基于.NET的三層Client/Server結(jié)構(gòu)及其應(yīng)用[J].計(jì)算機(jī)工程與設(shè)計(jì),2011,(1):37-41
[9]李學(xué)軍,審瑞民.構(gòu)建基于Windows DNA的三層應(yīng)用[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2011,(8):31-33
[10]李東紅,董春麗.多層次 Client/Server結(jié)構(gòu)及其應(yīng)用[J].信息工程大學(xué)學(xué)報(bào),2010,4(1):73-76
[11]Scott W.Ambler.The Object Primer The Application Developer'sGuide to Object Orientation and the UML(Second Edition)[M].北京:機(jī)械工業(yè)出版社,2010:99-110
[12]邵維忠,楊芙清.面向?qū)ο蟮南到y(tǒng)分析設(shè)計(jì)[M].北京:清華大學(xué)出版社,2011:137-151