閆居先
(天津市計(jì)劃生育藥具管理中心,天津 300070)
隨著移動(dòng)互聯(lián)網(wǎng)的迅速發(fā)展與普及,信息化在計(jì)生藥具發(fā)放管理服務(wù)中發(fā)揮著越來越重要的作用。為實(shí)現(xiàn)計(jì)劃生育藥具調(diào)撥、發(fā)放、儲(chǔ)存、質(zhì)量、統(tǒng)計(jì)、宣傳等各項(xiàng)業(yè)務(wù)工作相關(guān)數(shù)據(jù)的整合和統(tǒng)一管理,完善計(jì)劃生育藥具發(fā)放網(wǎng)絡(luò)和發(fā)放模式,進(jìn)一步提高藥具優(yōu)質(zhì)服務(wù)水平,基于藥具發(fā)放管理服務(wù)功能需求分析,開發(fā)設(shè)計(jì)了藥具發(fā)放管理服務(wù)信息平臺(tái)。本文主要從軟件基礎(chǔ)架構(gòu)和應(yīng)用服務(wù)器架構(gòu)方面簡(jiǎn)述了計(jì)劃生育藥具發(fā)放管理服務(wù)平臺(tái)架構(gòu)搭建,提出計(jì)劃生育藥具發(fā)放管理服務(wù)平臺(tái)技術(shù)解決方案。
計(jì)劃生育藥具發(fā)放管理服務(wù)平臺(tái)由藥具發(fā)放設(shè)備管理系統(tǒng)、藥具免費(fèi)發(fā)放服務(wù)網(wǎng)站、藥具免費(fèi)發(fā)放微信公眾服務(wù)系統(tǒng)、藥具語音咨詢服務(wù)熱線管理系統(tǒng)、藥具管理網(wǎng)絡(luò)辦公系統(tǒng)、藥具購調(diào)存業(yè)務(wù)管理信息系統(tǒng)、藥具倉儲(chǔ)環(huán)境遠(yuǎn)程監(jiān)管平臺(tái)7個(gè)子系統(tǒng)組成,各系統(tǒng)按業(yè)務(wù)管理和發(fā)放服務(wù)需要設(shè)計(jì)功能模塊。
該系統(tǒng)是各類藥具發(fā)放終端發(fā)放藥具及相關(guān)統(tǒng)計(jì)、查詢、管理和考核的專用系統(tǒng)。主要功能模塊為用戶管理、發(fā)放管理、統(tǒng)計(jì)管理、查詢管理、報(bào)表管理、考核管理等。
該網(wǎng)站是藥具宣傳咨詢服務(wù)管理的專屬網(wǎng)站,設(shè)服務(wù)、公告、咨詢、視頻4個(gè)中心和求助專線,主要欄目包括藥具品種、發(fā)放網(wǎng)點(diǎn)、發(fā)放渠道、兩性知識(shí)、健康專欄、視教頻道等,設(shè)計(jì)訂單查詢跟蹤系統(tǒng)和緊急避孕援助專線。
微信公眾平臺(tái)設(shè)計(jì)品種介紹、小貼士、近期活動(dòng)、兩性健康、微視頻信息等信息欄目。物流查詢欄目設(shè)計(jì)發(fā)放藥具功能。
該系統(tǒng)主要由自動(dòng)語音應(yīng)答、人工座席和數(shù)據(jù)庫三部分組成。自動(dòng)語音應(yīng)答代替人工自動(dòng)接聽用戶電話。人工座席主要是為了在自動(dòng)語音應(yīng)答系統(tǒng)無法解決用戶問題的情況下,向用戶提供人工服務(wù)。數(shù)據(jù)庫系統(tǒng)主要用于保存用戶基本信息、服務(wù)請(qǐng)求信息以及政府部門的業(yè)務(wù)相關(guān)信息。
實(shí)現(xiàn)市區(qū)兩級(jí)藥具管理服務(wù)機(jī)構(gòu)網(wǎng)絡(luò)辦公和全流程工作管理。功能模塊設(shè)計(jì)主要有網(wǎng)絡(luò)辦公系統(tǒng)、信息中心、基礎(chǔ)工作、網(wǎng)點(diǎn)信息、財(cái)務(wù)管理、計(jì)劃統(tǒng)計(jì)、質(zhì)量管理、庫房信息等。
管理市區(qū)兩級(jí)藥具購進(jìn)、存儲(chǔ)、調(diào)撥環(huán)節(jié)業(yè)務(wù)。功能模塊包括系統(tǒng)管理、收款管理、計(jì)劃管理、藥具管理賬表、入庫管理、數(shù)據(jù)查詢、出庫管理、業(yè)務(wù)監(jiān)管、在庫管理、報(bào)表管理、付款管理、數(shù)據(jù)字典等。
管理市區(qū)兩級(jí)藥具庫房的溫濕度,由測(cè)點(diǎn)終端、管理主機(jī)、不間斷電源以及相關(guān)軟件等組成。各測(cè)點(diǎn)終端對(duì)周邊環(huán)境溫濕度進(jìn)行數(shù)據(jù)的實(shí)時(shí)采集、傳送和報(bào)警;管理主機(jī)對(duì)各測(cè)點(diǎn)終端監(jiān)測(cè)的數(shù)據(jù)進(jìn)行收集、處理和記錄。
計(jì)劃生育藥具發(fā)放管理服務(wù)平臺(tái)架構(gòu)如圖1所示。
圖1 計(jì)劃生育藥具發(fā)放管理服務(wù)平臺(tái)架構(gòu)Fig.1 Framework of management platform for family planning drug delivery
數(shù)據(jù)中心用來存儲(chǔ)藥具領(lǐng)取人個(gè)人信息、藥具信息、工作文檔、通知、工作信息等,還存儲(chǔ)發(fā)放單位組織機(jī)構(gòu)信息、組織人員信息等數(shù)據(jù),是整個(gè)平臺(tái)的基礎(chǔ)。
該系統(tǒng)需要實(shí)現(xiàn)系統(tǒng)管理、權(quán)限管理、安全管理、用戶管理、機(jī)構(gòu)管理、人員管理、工作流管理、資訊、公告管理、系統(tǒng)對(duì)接管理、消息管理等。
平臺(tái)提供與各相關(guān)業(yè)務(wù)系統(tǒng)的數(shù)據(jù)接口,以便進(jìn)行數(shù)據(jù)整合、信息發(fā)布。目前提供與網(wǎng)站、微信公眾賬號(hào)、語音服務(wù)熱線(呼叫中心)、自助發(fā)放機(jī)、藥具購調(diào)存系統(tǒng)等均采用數(shù)據(jù)接口進(jìn)行數(shù)據(jù)交互。
對(duì)于一個(gè)完善的平臺(tái)來說,提供的擴(kuò)展性接口以及數(shù)據(jù)服務(wù)都是必不可少的。平臺(tái)間的數(shù)據(jù)交換就涉及一個(gè)跨平臺(tái)的問題。從J2EE平臺(tái)到.net平臺(tái)是一種典型的跨平臺(tái)數(shù)據(jù)交換,WebService就是解決目前跨平臺(tái)數(shù)據(jù)交換最常用的方案[1-3]。
業(yè)務(wù)數(shù)據(jù)層完成數(shù)據(jù)存儲(chǔ)的功能。藥具領(lǐng)取人個(gè)人信息、發(fā)放藥具信息、工作文檔、通知、工作信息、發(fā)放單位組織機(jī)構(gòu)信息、組織人員信息等數(shù)據(jù),均存放在該層中。
應(yīng)用服務(wù)層是整個(gè)平臺(tái)業(yè)務(wù)處理的核心部分,基于J2EE標(biāo)準(zhǔn)建設(shè),工作流管理、資訊、公告管理、支付管理等,都采用J2EE業(yè)務(wù)組件實(shí)現(xiàn)。
訪問服務(wù)可以支持基于Internet的瀏覽服務(wù),基于Wireless的移動(dòng)訪問服務(wù),通過聯(lián)通或電信網(wǎng)關(guān)的短信服務(wù)。
支持最終用戶使用瀏覽器、移動(dòng)設(shè)備、微信進(jìn)行訪問。
多層結(jié)構(gòu)的系統(tǒng)多采用瘦客戶/胖服務(wù)器的架構(gòu),即業(yè)務(wù)邏輯放在服務(wù)器端,而客戶機(jī)僅處理信息的輸入、結(jié)果的顯示和業(yè)務(wù)流程的控制。系統(tǒng)設(shè)計(jì)成多層結(jié)構(gòu),不僅擴(kuò)展性好,而且可維護(hù)性也較好。
多層企業(yè)級(jí)應(yīng)用框架MTEAF(multi tier enterprise application framework)是基于MVC[4]設(shè)計(jì)思想的系統(tǒng)框架。本框架和業(yè)務(wù)邏輯完全無關(guān),目的是使得開發(fā)者在建設(shè)基于J2EE標(biāo)準(zhǔn)的多層結(jié)構(gòu)系統(tǒng)時(shí),能夠在已經(jīng)預(yù)先部署好的框架中進(jìn)行設(shè)計(jì)與開發(fā)。MTEAF在系統(tǒng)的整體架構(gòu)上已經(jīng)做了細(xì)致的分層,在嚴(yán)格保證架構(gòu)統(tǒng)一性的同時(shí),又給業(yè)務(wù)邏輯的具體實(shí)現(xiàn)方式留出了足夠的靈活性。對(duì)于設(shè)計(jì)者來說,只需要關(guān)注于業(yè)務(wù)邏輯的合理劃分與如何封裝;對(duì)于開發(fā)者來說,只需要關(guān)心某個(gè)具體功能的代碼如何編寫,對(duì)于框架的工作過程,開發(fā)人員無須掌握每個(gè)細(xì)節(jié)。
以B/S結(jié)構(gòu)的JSP/Servlet[5]作前端的表現(xiàn)層開發(fā),系統(tǒng)的客戶端只需要1個(gè)瀏覽器即可。通過瀏覽器完成前臺(tái)業(yè)務(wù)的相關(guān)操作。系統(tǒng)架構(gòu)也充分考慮到了系統(tǒng)的安全性、可靠性和健壯性。通過設(shè)置系統(tǒng)日志,自動(dòng)記錄全部操作過程;通過完整的權(quán)限管理機(jī)制,將權(quán)限按系統(tǒng)級(jí)、數(shù)據(jù)庫級(jí)和業(yè)務(wù)級(jí)劃分到每個(gè)角色(包括操作員和系統(tǒng)維護(hù)人員),使之在嚴(yán)格規(guī)定的權(quán)限范圍內(nèi)工作。在大多數(shù)B/S結(jié)構(gòu)的Web應(yīng)用中,瀏覽器直接通過HTML或者JSP的形式與用戶交互,響應(yīng)用戶的請(qǐng)求。雖然很直觀,但當(dāng)遇到大批量數(shù)據(jù)應(yīng)用時(shí),隨著代碼的增多會(huì)使JSP頁面臃腫不堪,Web服務(wù)器的負(fù)荷過重。MTEAF框架采用多層結(jié)構(gòu)設(shè)計(jì),可使數(shù)據(jù)層與表示層分離,并且設(shè)計(jì)充分考慮降低層與層間的耦合[5]。
總之,應(yīng)用系統(tǒng)架構(gòu)在系統(tǒng)易用性、擴(kuò)展性、可維護(hù)性、重用性、可靠性、安全性等方面都進(jìn)行了充分的考慮。這是一種兼顧開發(fā)效率和運(yùn)行效率,同時(shí)滿足分布式事件處理功能的系統(tǒng)架構(gòu)。在MVC設(shè)計(jì)模式的實(shí)現(xiàn)中,視圖采用瀏覽器上顯示的頁面。這種設(shè)計(jì)具有B/S/S結(jié)構(gòu)的客戶端零維護(hù)的優(yōu)勢(shì)[6]。
在控制層的設(shè)計(jì)中分成兩個(gè)部分:系統(tǒng)調(diào)用流程控制和系統(tǒng)服務(wù)。
將核心的業(yè)務(wù)做成組件的形式,使業(yè)務(wù)層得到最大限度的重用。并且在組件的數(shù)據(jù)交互接口不變的前提下,如果業(yè)務(wù)邏輯發(fā)生變化則只需要修改組件內(nèi)部邏輯,不用修改系統(tǒng)的其他部分即可。實(shí)現(xiàn)了層次間的松耦合,實(shí)現(xiàn)了業(yè)務(wù)邏輯的封裝。
調(diào)用模型的設(shè)計(jì)主要采用了層次化的設(shè)計(jì)思想,主要應(yīng)用了MVC的設(shè)計(jì)模式。系統(tǒng)橫向以MVC模式分層??傮w調(diào)用層次分為4個(gè)大的橫向調(diào)用層次:客戶端層(view)→服務(wù)器框架(controller)→業(yè)務(wù)組件(model)→數(shù)據(jù)庫(model)。MTEAF調(diào)用模型如圖2所示,體現(xiàn)了系統(tǒng)的架構(gòu)模式、調(diào)用順序、調(diào)用層次,使用的技術(shù)及如何分布等一系列重要問題??蛻舳瞬捎脼g覽器為解決方案,通過JSP及taglib來實(shí)現(xiàn)客戶端的顯示。
圖2 系統(tǒng)運(yùn)行調(diào)用模型Fig.2 Call model of system operation
應(yīng)用服務(wù)器端分成Web控制層、業(yè)務(wù)委派層、商業(yè)邏輯層、持久層。在商業(yè)邏輯層采用EJB。將核心的業(yè)務(wù)做成組件的形式,使業(yè)務(wù)層得到最大限度的重用。并且在組件的數(shù)據(jù)交互接口不變的前提下,如果業(yè)務(wù)邏輯發(fā)生變化則只需要修改組件內(nèi)部邏輯,不用修改系統(tǒng)的其他部分即可。實(shí)現(xiàn)了層次間的松耦合,實(shí)現(xiàn)了業(yè)務(wù)邏輯的封裝。
表示層即用戶操作界面,在本系統(tǒng)中,用戶只需要使用瀏覽器就可以滿足業(yè)務(wù)的需要。除此之外,對(duì)于一些常用的信息瀏覽,系統(tǒng)提供XML數(shù)據(jù)接口,可以通過RSS瀏覽器等工具進(jìn)行瀏覽。
Web控制層是整個(gè)應(yīng)用系統(tǒng)的中間層,是應(yīng)用客戶端和業(yè)務(wù)邏輯層之間的中介。由于Web控制層在整個(gè)應(yīng)用結(jié)構(gòu)上所占據(jù)的位置,所以在應(yīng)用系統(tǒng)的架構(gòu)設(shè)計(jì)上也具有很重要的意義,也是系統(tǒng)架構(gòu)設(shè)計(jì)第一個(gè)需要解決的問題。
Web控制層作為整個(gè)應(yīng)用系統(tǒng)的中間層,同時(shí)需要為整個(gè)應(yīng)用系統(tǒng)進(jìn)行會(huì)話管理、身份驗(yàn)證、授權(quán)驗(yàn)證等管理控制任務(wù)。Web控制層作為客戶端請(qǐng)求的入口,根據(jù)整個(gè)框架、尤其是業(yè)務(wù)邏輯層的要求對(duì)請(qǐng)求進(jìn)行預(yù)處理,負(fù)責(zé)把業(yè)務(wù)請(qǐng)求傳遞到業(yè)務(wù)邏輯層進(jìn)行處理,同時(shí)把業(yè)務(wù)邏輯層的處理結(jié)果作為響應(yīng)發(fā)回給客戶端,在客戶端業(yè)務(wù)請(qǐng)求與業(yè)務(wù)邏輯層業(yè)務(wù)處理之間起到了協(xié)調(diào)控制的作用。
Web控制層的主體是由一組 Filter/Servlet[7]構(gòu)成的,它們同時(shí)依靠一些支持類庫和工具類庫來正常運(yùn)行。Web控制層主要由最前端的HeadFilter、SaftyFilter、MainServlet組 成 的 過 濾 器 鏈 (Filter Chain)。
Web控制層需要截獲請(qǐng)求,首先由HeadFilter對(duì)請(qǐng)求消息進(jìn)行解析、重組后(主要為了驗(yàn)證請(qǐng)求是否符合通用規(guī)則)轉(zhuǎn)發(fā)請(qǐng)求到SaftyFilter,在這里進(jìn)行用戶身份驗(yàn)證、用戶授權(quán)和用戶會(huì)話的控制管理,最后客戶請(qǐng)求將發(fā)送到MainServlet主控器,MainServlet根據(jù)后端業(yè)務(wù)派遣層和業(yè)務(wù)邏輯層的要求封裝業(yè)務(wù)請(qǐng)求并提交業(yè)務(wù)處理請(qǐng)求,業(yè)務(wù)派遣層最終把業(yè)務(wù)請(qǐng)求傳遞到業(yè)務(wù)邏輯層進(jìn)行處理,同時(shí)把業(yè)務(wù)邏輯層的處理結(jié)果封裝后發(fā)回MainServlet,控制權(quán)重新回到Web控制層。MainServlet將請(qǐng)求轉(zhuǎn)發(fā)至 ViewDispatchServlet,ViewDispatchServlet根據(jù)本次請(qǐng)求的 FunctionID和表現(xiàn)層 Web頁面的對(duì)應(yīng)關(guān)系,將請(qǐng)求轉(zhuǎn)發(fā)到相應(yīng)的頁面顯示給用戶。處理結(jié)果通過在Request上綁定EventResponse進(jìn)行傳遞。
業(yè)務(wù)委派層作為Web控制層與企業(yè)應(yīng)用層之間的代理,從Web控制層接收業(yè)務(wù)處理請(qǐng)求,然后轉(zhuǎn)交給企業(yè)應(yīng)用層進(jìn)行實(shí)際處理,把企業(yè)應(yīng)用層的業(yè)務(wù)處理結(jié)果發(fā)回Web應(yīng)用層。
業(yè)務(wù)委派層采用Command設(shè)計(jì)模式來處理業(yè)務(wù)請(qǐng)求的分發(fā)派遣。
業(yè)務(wù)委派層由業(yè)務(wù)處理請(qǐng)求控制器(Request Processor)統(tǒng)一接收Web控制層提交的業(yè)務(wù)處理請(qǐng)求,業(yè)務(wù)處理請(qǐng)求控制器進(jìn)行業(yè)務(wù)處理請(qǐng)求的封裝,從業(yè)務(wù)請(qǐng)求中截取對(duì)應(yīng)業(yè)務(wù)處理行為類信息(具體Action子類),并且通過動(dòng)態(tài)實(shí)例化獲得類型為Action的具體業(yè)務(wù)處理行為實(shí)例。采用Command模式設(shè)計(jì)的BaseAction以及其子類來完成業(yè)務(wù)處理請(qǐng)求的派遣。通過BaseAction接口對(duì)業(yè)務(wù)請(qǐng)求處理的一致抽象,RequestProcessor不需知道業(yè)務(wù)請(qǐng)求派遣的具體實(shí)現(xiàn)細(xì)節(jié),利用多態(tài)性,業(yè)務(wù)處理請(qǐng)求會(huì)準(zhǔn)確傳遞到具體BussinessAction,并進(jìn)一步傳入業(yè)務(wù)邏輯層,最終由數(shù)據(jù)訪問DAO協(xié)同執(zhí)行業(yè)務(wù)處理。
業(yè)務(wù)邏輯層實(shí)現(xiàn)了所有的業(yè)務(wù)邏輯處理。
BussinessAction層的設(shè)計(jì)使用的是業(yè)務(wù)代表(Business Delegate)的設(shè)計(jì)模式,BussinessAction的作用是向表示層提供客戶需要訪問業(yè)務(wù)服務(wù)。
使用BussinessAction作為業(yè)務(wù)代表的好處是可以降低表示層客戶端和業(yè)務(wù)服務(wù)層的耦合,業(yè)務(wù)代表隱藏了業(yè)務(wù)服務(wù)的實(shí)現(xiàn)細(xì)節(jié),提供更簡(jiǎn)單的、統(tǒng)一的接口更好的向客戶端提供服務(wù)。業(yè)務(wù)邏輯最終通過BussinessAction調(diào)用DAO實(shí)現(xiàn),DAO通過更底層的DBUtil和DBTransUtil實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的操作。
根據(jù)J2EE設(shè)計(jì)模式、DAO(data access object)模式、VO(value object)模式、以及ORM(O/R mapping)模式,構(gòu)建核心平臺(tái)的持久層。
持久層是數(shù)據(jù)訪問對(duì)象DAO。持久層是位于數(shù)據(jù)層之上的一層結(jié)構(gòu),它將所有數(shù)據(jù)連接邏輯封裝到數(shù)據(jù)訪問對(duì)象中,隱藏訪問數(shù)據(jù)源的API。使在系統(tǒng)架構(gòu)上建立的應(yīng)用程序不了解數(shù)據(jù)所在的數(shù)據(jù)庫平臺(tái)。使應(yīng)用程序與其使用和操縱的數(shù)據(jù)源分離。建立持久層的目的是分開數(shù)據(jù)持久邏輯與表示和業(yè)務(wù)邏輯的整潔機(jī)制。業(yè)務(wù)層與數(shù)據(jù)庫的交互是通過為數(shù)據(jù)訪問對(duì)象提供的統(tǒng)一接口和輔助實(shí)現(xiàn)類DAO來實(shí)現(xiàn)的,取代了使用JDBC之類的數(shù)據(jù)訪問API訪問數(shù)據(jù)庫。
DAO模式和VO模式完全分離業(yè)務(wù)應(yīng)用程序的開發(fā)人員與其在應(yīng)用程序中使用的數(shù)據(jù)源,不需要知道數(shù)據(jù)訪問的API,而是用統(tǒng)一的接口來完成對(duì)數(shù)據(jù)庫表的插入、刪除、更新、查詢等數(shù)據(jù)操縱功能。
FunctionID是用來區(qū)分客戶端不同請(qǐng)求的標(biāo)示。每一個(gè)需要進(jìn)行業(yè)務(wù)處理的請(qǐng)求,都必須為其定義一個(gè)唯一的FunctionID。系統(tǒng)的運(yùn)行依托于和FunctionID相關(guān)的2個(gè)重要的對(duì)應(yīng)關(guān)系。
FunctionID和BussinessAction的對(duì)應(yīng)關(guān)系:每一個(gè)FunctionID都必須有一個(gè)BussinessAction相對(duì)應(yīng)。業(yè)務(wù)委派層中的RequestProcessor通過這種對(duì)應(yīng)關(guān)系,找到和請(qǐng)求相對(duì)應(yīng)的BussinessAction,調(diào)用BussinessAction.perform (Event),進(jìn)行相關(guān)業(yè)務(wù)處理,從而實(shí)現(xiàn)業(yè)務(wù)的分發(fā)。此對(duì)應(yīng)關(guān)系可以通過xml文件進(jìn)行定義,也可以保存在數(shù)據(jù)庫中。在進(jìn)行業(yè)務(wù)邏輯部分編程的時(shí)候,需要對(duì)該對(duì)應(yīng)關(guān)系進(jìn)行提前設(shè)計(jì)和定義。在MainServlet進(jìn)行初始化的時(shí)候進(jìn)行加載,保存在ServletContext上,供全局調(diào)用。
FunctionID和ViewSuccess的對(duì)應(yīng)關(guān)系:每一個(gè)FunctionID都必須對(duì)應(yīng)一組ViewSuccess(實(shí)質(zhì)上是一組jsp頁面)。一個(gè)業(yè)務(wù)邏輯處理完畢后,控制權(quán)將重新交給MainServlet,MainServlet并不能直接顯示用戶界面,而是將控制權(quán)轉(zhuǎn)給 ViewDispatch-Servlet,ViewDispatchServlet根 據(jù) FunctionID 和ViewSuccess的對(duì)應(yīng)關(guān)系,將請(qǐng)求轉(zhuǎn)發(fā)到相應(yīng)的頁面。業(yè)務(wù)處理的結(jié)果通過將ResponseEvent綁定在request上傳遞到JSP頁面進(jìn)行顯示。一般來說,每個(gè)FunctionID根據(jù)處理結(jié)果是成功、失敗、錯(cuò)誤3種情況分別對(duì)應(yīng)3個(gè)JSP頁面。此對(duì)應(yīng)關(guān)系可以通過xml文件進(jìn)行定義,也可以保存在數(shù)據(jù)庫中。進(jìn)行業(yè)務(wù)邏輯部分編程的時(shí)候,需要根據(jù)客戶端頁面的開發(fā)情況,對(duì)該對(duì)應(yīng)關(guān)系進(jìn)行定義。在ViewDispatchServlet進(jìn)行初始化的時(shí)候,加載該對(duì)應(yīng)關(guān)系,保存在ServletContext上,供全局調(diào)用。
FunctionID和兩個(gè)對(duì)應(yīng)關(guān)系是本系統(tǒng)架構(gòu)中非常重要的概念,是系統(tǒng)運(yùn)行貫穿始終的紐帶。
上述多個(gè)層面的應(yīng)用系統(tǒng)和相
關(guān)技術(shù)再結(jié)合的解決方案,特別是在移動(dòng)媒體上開創(chuàng)性設(shè)計(jì)的微信發(fā)放藥具功能系統(tǒng)緊跟當(dāng)今最新潮流,將計(jì)劃生育藥具發(fā)放管理和發(fā)放服務(wù)的所有業(yè)務(wù)領(lǐng)域和各環(huán)節(jié)均納入到信息化平臺(tái)中,采用最新軟件開發(fā)技術(shù)路線,應(yīng)用ORACLE數(shù)據(jù)庫,JAVA開發(fā)語言,確保了系統(tǒng)的安全性、穩(wěn)定性和可擴(kuò)展性。
[1] CayS.Horstmann.JAVA核心技術(shù)卷II:高級(jí)特性[M].陳昊鵬,等譯.8版.北京:機(jī)械工業(yè)出版社,2008.
[2] Michael Blaha,James Rumbaugh.UML面向?qū)ο蠼Ec設(shè)計(jì)[M].車皓陽,楊眉,譯.2版.北京:人民郵電出版社,2006.
[3] Steven John Metsker,William C.Wake.Java設(shè)計(jì)模式[M].2版.北京:電子工業(yè)出版,2012.
[4] 孫衛(wèi)琴.精通Struts:基于MVC的Java Web設(shè)計(jì)與開發(fā)[M].北京:電子工業(yè)出版社,2004.
[5] 劉曉華,周慧貞.JSP應(yīng)用開發(fā)詳解[M].北京:電子工業(yè)出版社,2007.
[6] 布呂格,迪圖瓦.面向?qū)ο筌浖こ蹋菏褂肬ML、模式與Java[M].葉俊民,汪望珠,等譯.3版.北京:清華大學(xué)出版社,2007.
[7] 昊斯特曼.Java核心技術(shù):卷Ⅰ基礎(chǔ)知識(shí)[M].葉乃文,鄺勁筠,杜永萍,譯.8版.北京:機(jī)械工業(yè)出版社,2008.