莫朵朵+詹秀菊
摘 要 傳統(tǒng)的藥品信息查詢?nèi)菀走z漏信息且查詢效率低下,為提升用戶體驗及對癥用藥的準確性和效率,本研究開發(fā)一款基于iOS平臺的藥品信息查詢軟件,使用戶通過手機終端快速查詢所需藥品及相關(guān)健康信息,創(chuàng)建個人藥箱.軟件使用的開發(fā)語言為Objective-C,開發(fā)技術(shù)有AFNetworking網(wǎng)絡通信技術(shù)、FMDB連接SQLite數(shù)據(jù)庫技術(shù)以及Map Kit地圖技術(shù)等.軟件可以快速的查詢藥品信息,擴展手機應用于醫(yī)療領域的功能.
關(guān)鍵詞 iOS平臺; 藥品查詢; 軟件開發(fā)
中圖分類號 TP311 文獻標識碼 A 文章編號 1000-2537(2017)03-0083-06
Design and Implementation of Medicine Information Query Tool Based on iOS Platform
MO Duo-duo1, ZHAN Xiu-ju1*, YI Jun-fei2
(1.School of Medical Information Engineering, Guangzhou University of Chinese Medicine, Guangzhou 510006, China;
2.School of Automation, Xian University of Posts and Telecommunications, Xian 710121, China)
Abstract A traditional drug information query often omits information and is inefficient. In order to enhance the user experience and improve the accuracy and efficiency of symptomatic medication, we developed a drug information query based on iOS platform that allows users to quickly obtain the mobile terminal products and inquired inquiries health information, and create personal kits in line with users eagerness and attention to health needs. The development language of this software is Objective-C. The development technology includes AFNetworking network communication technology, FMDB connection SQLite database technology and Map Kit map technology. This software provides timely and rapid drug-related information query function and extends the functionality and use of mobile phones in the medical field.
Key words iOS platform; drug search; software development
本研究開發(fā)基于iOS平臺的藥品信息查詢軟件,利用iPhone手機軟件實現(xiàn)查詢藥品相關(guān)信息的功能,如藥品查詢、病癥查詢、健康科普、藥店查詢、藥箱管理等功能,這不僅提高了藥品查詢的效率,而且增強了用戶對藥品相關(guān)信息的了解.與網(wǎng)絡程序不同,本地應用程序安裝在設備上,因此用戶可以隨時使用,即使設備處于航空模式[1].
1 開發(fā)環(huán)境
本軟件使用的操作系統(tǒng)為蘋果Mac OS X 10.9,開發(fā)前需要對iOS開發(fā)環(huán)境進行搭建.iOS SDK是開發(fā)iPhone和iPad軟件程序過程中必不可少的軟件開發(fā)包[2],軟件所需的全部接口、工具以及資源全都包含于SDK中.iOS SDK中包含的重要組件有Xcode, Interface Builder, Instruments和iPhone模擬器和iOS參考庫,其中Xcode作為一個集成的開發(fā)環(huán)境(IDE),為開發(fā)者提供由程序的創(chuàng)建、測試、優(yōu)化以及提交至App Store的整個工作流的管理工具[3].Interface Builder則是以可視化方式設計和測試用戶界面(GUI)的工具.Instruments是運行時性能分析和調(diào)試工具.iPhone模擬器是Mac OS X平臺軟件程序,它對iOS技術(shù)棧進行模擬,便于開發(fā)者可以在基于Intel的Macintosh計算機上測試iOS軟件程序.iOS參考庫為默認包含iOS開發(fā)過程中所需的參考文檔、示例代碼等幫助信息.文檔庫的更新會被自動下載到本地參考庫,開發(fā)者可以方便的在Xcode中查看參考庫相關(guān)信息.
2 開發(fā)語言和相關(guān)技術(shù)
本軟件使用語言為Objective-C,簡稱OC,它是Mac OS 和iOS平臺應用開發(fā)的標準語言,同其他的面向?qū)ο笳Z言一樣,具有封裝、繼承、多態(tài)等特點[4].但它也有自己的明顯特征,比如,它對動態(tài)機制的支持更為徹底,編譯器為運行環(huán)境保留了很多對象本身的數(shù)據(jù)信息,因此某些在編譯時需要做出的選擇可以推遲到運行時再決定[5].本軟件開發(fā)過程中使用到的技術(shù)有AFNetworking網(wǎng)絡通信技術(shù),F(xiàn)MDB連接SQLite數(shù)據(jù)庫技術(shù)和Map Kit地圖技術(shù)等.其中AFNetworking是一個為iOS和Mac OS X操作系統(tǒng)設計的網(wǎng)絡通信框架,具有模塊化的構(gòu)建方式和豐富功能的API.本軟件主要采用SQLite方式存儲數(shù)據(jù),以FMDB作為SQLite的封裝,通過接口方便的實現(xiàn)數(shù)據(jù)庫的增、刪、改、查等操作.
3 系統(tǒng)結(jié)構(gòu)設計
本軟件的開發(fā)利用了已有醫(yī)藥網(wǎng)站的數(shù)據(jù)庫數(shù)據(jù),并在這些數(shù)據(jù)的基礎上設計適用于iOS應用的服務器接口和基于iOS平臺的客戶端程序.
3.1 系統(tǒng)整體結(jié)構(gòu)
iOS客戶端基于Http網(wǎng)絡協(xié)議向服務器端發(fā)送數(shù)據(jù)請求,服務器端根據(jù)請求與數(shù)據(jù)庫進行通訊并返回Json對象數(shù)據(jù),客戶端接收返回的Json對象并進行解析,從而實現(xiàn)客戶端與服務器端的數(shù)據(jù)交互.系統(tǒng)整體結(jié)構(gòu)如圖1所示.
3.1.1 iOS客戶端 客戶端包含的主要功能模塊有導航菜單模塊:提供導航欄,使用戶可以通過底部的導航菜單快捷地切換不同的功能界面.查詢功能模塊:作為軟件的核心功能提供藥品、疾病、文章等內(nèi)容的查詢功能.內(nèi)容瀏覽模塊:負責根據(jù)用戶查詢結(jié)果顯示相關(guān)內(nèi)容,它通過網(wǎng)絡訪問模塊加載藥品、疾病、文章、地圖信息等相關(guān)數(shù)據(jù).用戶收藏模塊:提供對藥品和文章信息進行收藏和管理的功能網(wǎng)絡訪問模塊管理著各種Web服務接口,方便其他模塊能夠調(diào)用接口與服務器通訊從而提供的各種服務.數(shù)據(jù)庫查詢模塊:實現(xiàn)增、刪、查、改等基本的數(shù)據(jù)庫操作.如圖2所示.
3.1.2 iOS服務端 系統(tǒng)的服務端包含網(wǎng)站的服務器和數(shù)據(jù)庫,以及針對客戶端設計的Web服務接口3部分.網(wǎng)站服務器主要用于用戶對Web站點的訪問,數(shù)據(jù)庫服務器為網(wǎng)站提供數(shù)據(jù)的存儲和管理服務,Web服務接口則用于與iOS 客戶端的通訊服務,使得客戶端能夠與網(wǎng)站服務器共享數(shù)據(jù)庫的數(shù)據(jù)以及使用服務器所提供的其他服務.
3.2 MVC模式設計
MVC即Model-View-Controller,即把一個應用的輸入、處理、輸出流程按照Model,View和Controller的方式進行分離,這樣一個應用被分成3個層——模型層、視圖層、控制層[6].iOS平臺應用程序主要采用MVC設計模式作為總體設計框架.MVC一個更為合理的縮寫應該是MdMaVC[7],作為iOS開發(fā)中最主要使用的設計模式之一,貫穿于整個iOS應用程序的設計之中.MVC對于視圖處理僅限于采集所需要的數(shù)據(jù)和對用戶請求進行處理,而并不包括業(yè)務流程的處理,視圖上的業(yè)務流由模型部分來進行處理[8].它包括3個部分:模型(Model)、視圖(View)和控制器(Controller),分別對應于內(nèi)部數(shù)據(jù)、數(shù)據(jù)表示和輸入輸出控制部分.圖3描述了MVC模式3個部件之間的交互過程.
3.2.1 視圖(View) 視圖是直接面向用戶的界面,在接收用戶的操作并向控制器反映的同時接受控制器返回的數(shù)據(jù)并顯示在可視化界面上.本項目的大部分視圖采用XIB文件進行設計,XIB文件以XML格式保存了界面布局的相關(guān)屬性,如控件的位置,大小等數(shù)據(jù).大部分時候,我們都可以直接通過XCode來對XIB文件進行編輯[9].通過利用Xcode對XIB文件進行可視化編輯,減少大量布局代碼帶來的麻煩,提高項目開發(fā)的效率.
3.2.2 模型(Model) 模型用來保存通過數(shù)據(jù)源和數(shù)據(jù)含義等協(xié)議提供數(shù)據(jù),供控制器和視圖調(diào)用.本項目的模型層通過定義各種數(shù)據(jù)類型來存儲相關(guān)數(shù)據(jù),如藥品的相關(guān)信息、文章信息以及用戶信息等.通過把數(shù)據(jù)模型獨立封裝起來,降低了程序的耦合性.
3.2.3 控制器(Controller) 控制器充當連接視圖與模型的媒介,實現(xiàn)兩者之間的間接通訊.在iOS應用程序開發(fā)中,控制器一方面接受視圖傳過來的事件并進行響應,另一方面控制器使用模型來渲染對應的視圖[10].本項目的控制器層中使用到了較多的控制器類,主要定義各種應用界面和服務的接口,以便對視圖傳遞過來的操作進行相應處理,從而實現(xiàn)接口提供的各種服務.
4 數(shù)據(jù)庫設計
數(shù)據(jù)庫設計是指對于一個給定的應用環(huán)境,構(gòu)造(設計)優(yōu)化的數(shù)據(jù)庫邏輯模式和物理結(jié)構(gòu),并據(jù)此建立數(shù)據(jù)庫及其應用系統(tǒng),使之能夠有效地存儲和管理數(shù)據(jù),滿足各種用戶的應用需求,包括信息管理要求和數(shù)據(jù)操作要求[11].
4.1 基本存儲方式
本項目的數(shù)據(jù)存儲主要使用了NSUserDefaults和SQLite兩種數(shù)據(jù)庫.NSUserDefaults主要用來存儲設備和應用的配置信息,它通過一個工廠方法返回包含用戶信息的實例對象,并且把對象信息以字典的形式組織起來.本軟件的用戶配置信息和參數(shù)主要通過NSUser-Defaults來保存.SQLite數(shù)據(jù)庫作為本藥品查詢軟件中最主要的數(shù)據(jù)存儲方式.所有查詢記錄信息、科普文章相關(guān)信息以及用戶相關(guān)信息都存儲在SQLite數(shù)據(jù)庫文件中,該SQLite數(shù)據(jù)庫文件名為MedicineSearch.sqlitedb.
4.2 數(shù)據(jù)庫表設計
在本項目的SQLite數(shù)據(jù)庫中,主要有查詢記錄表m_search_record,文章收藏表m_article_collect和藥箱藥品表m_cabinet_ medicine.下面以幾個數(shù)據(jù)庫表來展示數(shù)據(jù)庫的設計:
5 藥品查詢軟件的設計與實現(xiàn)
根據(jù)系統(tǒng)的需求分析與設計,本軟件重點設計并實現(xiàn)了查詢、內(nèi)容瀏覽和用戶收藏等功能,下面著重介紹這3個功能模塊在iOS開發(fā)平臺下的設計與實現(xiàn).
5.1 查詢功能模塊實現(xiàn)
查詢功能模塊作為本軟件的核心功能,提供了藥品、疾病、文章等內(nèi)容的查詢功能.根據(jù)用戶的輸入內(nèi)容,調(diào)用網(wǎng)絡訪問模塊從服務器中加載相關(guān)資源數(shù)據(jù).
5.1.1 基本查詢 該功能設計了兩種查詢方式,一方面用戶可以通過主界面的搜索框直接搜索查詢;另一方面還可以根據(jù)常見病癥的分類進行查詢.當用戶通過這兩種方式進行搜索時,當前控制器會初始化一個用于顯示搜索結(jié)果的視圖控制器,同時調(diào)用網(wǎng)絡訪問模塊將結(jié)果數(shù)據(jù)傳送過去.由于加載的結(jié)果數(shù)據(jù)分為3種類型,UITableView需要構(gòu)造3種不同的section,使得不同section里的cell具有不同的風格,如藥品類的cell需要顯示圖標和文字,文章類則需要圖片和文字,而疾病類只需要顯示文字信息.如果使用3個不同的UITableView來實現(xiàn),會使得代碼的冗余度較高,而且對內(nèi)容加載的效率也有影響.因此考慮使用單個UITableView來實現(xiàn)這種效果.在iOS開發(fā)中,UITableView中的cell具有復用機制使得具有相同id屬性的cell會被重復使用,因此要使用不同風格的cell就需要改變不同種cell中的id屬性,實現(xiàn)一個UITableView中設置3種cell的復用,從而達到顯示3種不同風格的cell的效果.
5.1.2 虛假藥品查詢 對涉及虛假廣告的藥品進行鑒別查詢,當用戶輸入內(nèi)容進行查詢時,控制器通過網(wǎng)絡訪問模塊與服務器通訊獲取搜索結(jié)果,同時初始化一個UITableView列表來顯示查詢結(jié)果.用戶點擊該列表的子項時,當前界面會初始化一個視圖控制器并加載服務端返回的虛假藥品詳情數(shù)據(jù).
5.1.3 藥店查詢 為實現(xiàn)該功能,在開發(fā)前需要導入〈MapKit/MapKit.h〉和〈CoreLocation/CoreLocation.h〉兩個工具包,其中〈MapKit/MapKit.h〉實現(xiàn)地圖主要功能,而〈CoreLocation/CoreLocation.h〉則負責地圖的定位.軟件首先通過手機的定位功能獲取用戶當前的位置信息,然后將定位信息通過網(wǎng)絡訪問模塊發(fā)送到服務器端接口,服務端經(jīng)過處理后返回附近藥店的地理信息并將這些信息合理地標注在界面的地圖視圖上.
地圖視圖控制器中的藥店坐標采用地圖中常見的大頭針進行標注.為方便用戶對藥店信息的查看,本模塊對地圖中的大頭針進行了重新設計,當用戶點擊大頭針時會出現(xiàn)以氣泡形式注釋的地點信息.由于手機屏幕尺寸的局限,當?shù)貓D中的坐標點較多較密集時,用戶對坐標的點擊會變得相對困難,因此在地圖界面中設計了一個右側(cè)隱藏的UITableView列表,用于列出查詢到的全部藥店的信息,以便用戶根據(jù)實際情況對藥店進行選擇和比較.
5.2 內(nèi)容瀏覽模塊實現(xiàn)
內(nèi)容瀏覽模塊負責根據(jù)用戶查詢結(jié)果顯示相關(guān)內(nèi)容,它通過網(wǎng)絡訪問模塊加載藥品、疾病、文章、地圖信息等相關(guān)數(shù)據(jù),當用戶需要瀏覽時對這些數(shù)據(jù)進行格式排版使其合理顯示在設備屏幕上.其中疾病信息的瀏覽擴展了治療方案和相關(guān)藥品的內(nèi)容,文章信息的瀏覽則擴展了健康專題的內(nèi)容.
5.3 用戶收藏模塊實現(xiàn)
用戶收藏模塊提供了對藥品和文章信息進行收藏和管理的功能.藥品收藏功能提供了自定義藥品的收藏和推薦常備藥功能.實現(xiàn)方法為初始化一個FMDB數(shù)據(jù)庫操作對象,然后通過該對象調(diào)用查詢方法和相關(guān)的SQL語句對SQLite數(shù)據(jù)庫進行查詢.常備藥品信息的瀏覽則調(diào)用藥品信息瀏覽功能,根據(jù)用戶選擇的藥品跳轉(zhuǎn)到相應的藥品信息瀏覽界面.而文章收藏功能,實現(xiàn)存儲用戶在使用過程中收藏過的文章,其實現(xiàn)方法與藥品收藏功能所實現(xiàn)的技術(shù)是一樣的,但文章除需要保存文章信息外還需保存文章的圖片,所以采取把圖片資源保存在服務器端,在本地則以圖片地址的形式保存.當用戶查看文章列表時,軟件先通過查詢數(shù)據(jù)庫獲得文章圖片的網(wǎng)絡地址,再根據(jù)網(wǎng)絡地址獲取圖片資源加載到文章列表上.
6 系統(tǒng)測試與分析
6.1 測試環(huán)境
本文的測試環(huán)境主要使用的工具有Mac電腦和iOS設備.Mac系統(tǒng)為OS X 10.9 Mavericks.開發(fā)工具版本為Xcode 5.1.1,iPhone 4s,iOS設備為iPhone 4s,系統(tǒng)為iOS 7,屏幕:3.5寸,CPU主頻800 MHz,內(nèi)存:512RAM.支持網(wǎng)絡:2G(GPRS),3G(WCDMA)和Wi-Fi.網(wǎng)絡設備為無線路由器,接入Internet網(wǎng)絡.
6.2 性能測試
本軟件的測試過程分為3個部分,分別是單元測試、功能測試和性能測試.下面僅介紹性能測試.
性能測試主要從時間和空間兩個方面進行,其中時間性能從軟件的流暢性出發(fā),主要研究軟件對于用戶操作的響應時間以及是否有卡頓、不流暢的現(xiàn)象.空間性能則主要指軟件運行時消耗的資源情況如CPU使用情況、內(nèi)存使用情況等.本項目的性能測試通過在真機中部署應用程序,模擬軟件在真實場景中運行使用一段時間,并對運行過程中內(nèi)存占用情況與內(nèi)存泄露情況的相關(guān)數(shù)據(jù)進行跟蹤研究.Xcode開發(fā)工具內(nèi)置了一個測試工具Instruments,該工具能較為方便地追蹤軟件運行過程中的數(shù)據(jù)并以圖形化的界面直觀地顯示出來,這些數(shù)據(jù)包括內(nèi)存占用,CPU占用,內(nèi)存泄露等.
6.3 測試結(jié)果
隨著程序的運行和用戶的使用,程序占用的內(nèi)存隨著加載的數(shù)據(jù)增加,而CPU則一直表現(xiàn)為平穩(wěn)的低占用狀態(tài),在數(shù)據(jù)量較大的模塊如地圖查詢才會出現(xiàn)較高內(nèi)存和CPU的占用,而從Instruments的數(shù)據(jù)中發(fā)現(xiàn)程序并沒有發(fā)生內(nèi)存泄露.雖然內(nèi)存占用剛開始在10M左右徘徊,但隨著程序功能的逐步使用內(nèi)存消耗不斷增加,最終長時間穩(wěn)定在60M左右,該數(shù)據(jù)對于移動設備來說還是比較高,這也是程序今后需要改進的地方.經(jīng)過測試,結(jié)果顯示項目已經(jīng)達到了預期的設計目標,滿足設計的需求.但是軟件的一些細節(jié)設計與可能出現(xiàn)的漏洞還需要在后續(xù)的更新和使用中進一步完善.下面是3個部分測試結(jié)果:
①單元測試階段:共測試133個測試用例,通過133個,失敗0個,錯誤0個.
②功能測試階段:本軟件所有功能測試用例在已有的iOS設備上均可正常運行,沒有出現(xiàn)錯誤情況.
③性能測試階段:具體測試結(jié)果如下表6所示.
參考文獻:
[1] Apple Inc. iOS參考庫[EB/OL].(2011-05-01)[2016-12-01]. http://developer.apple.com/library/ios/documentation/Miscellaneous/Conceptual/iPhoneOSTechOverview/Introduction/Introduction.html//apple-ref/doc/uid/TP4000789.
[2] Cocoa China. iOS開發(fā)系列之iOS SDK實例教程[EB/OL].(2013-05-17)[2016-12-03]. http://www.cocoachina.com/ios./20130517/6229.html.
[3] Apple. Xcode Over view:About Xcode[EB/OL].(2014-10-20)[2016-12-03].https://developer.apple.com/library/mac/documentation/Too lsLanguages/Conceptual/Xcode_Overview.
[4] 科施恩.Objective-C 2.0程序設計[M].張波,黃湘琴.北京:機械工業(yè)出版社,2009.
[5] CHUNG C.Pro Objective-C design patterns for iOS[M].Los Angeles:Apress, 2011.
[6] 徐 明,陳廣宇.iOS平臺多媒體短信系統(tǒng)開發(fā)的設計模式研究[J].微電子學與計算機,2012,29(11):112-115.
[7] JOSH C. 觸動人心——設計優(yōu)秀的iPhone應用[M].包季真,譯.北京:電子工業(yè)出版社,2011.
[8] 互動百科.MVC[DB/OL]. (2015-03-15)[2016-12-03].http://www.hudong.com/wiki/MVC.
[9] 郭 欣.構(gòu)建高性能Web站點[M].北京:電子工業(yè)出版社,2009.
[10] DALRYMPLE M, KNASTER S. Learn Objective-C on the Mac[M].Los Angeles:Apress, 2009.
[11] 王 珊.數(shù)據(jù)庫系統(tǒng)概論(第四版)[M].北京:高等教育出版社,2006.