王麗娟
中石油集團(tuán)長城鉆探工程有限公司錄井公司,遼寧 盤錦
基于設(shè)計模式的錄井圖繪制系統(tǒng)LogMaker的設(shè)計與實現(xiàn)
王麗娟
中石油集團(tuán)長城鉆探工程有限公司錄井公司,遼寧 盤錦
總結(jié)目前國內(nèi)錄井圖繪制系統(tǒng)存在的問題,從設(shè)計模式的基本概念、使用目的和基本要素等方面提出了基于多種設(shè)計模式的系統(tǒng)設(shè)計方案。針對國外錄井圖格式多樣不統(tǒng)一的特性,系統(tǒng)采用了模板與數(shù)據(jù)結(jié)合的加載方式,通過模板自動生成數(shù)據(jù)錄入界面,并支持多種數(shù)據(jù)庫系統(tǒng),快速輸出圖件。分析了MVC、Observer、Abstract Factory、Composite等4種設(shè)計模式的使用特點,詳細(xì)闡述了設(shè)計模式在各個功能模塊的應(yīng)用。
錄井圖,設(shè)計模式,模板
Copyright ? 2017 by author, Yangtze University and Hans Publishers Inc.
This work is licensed under the Creative Commons Attribution International License (CC BY).
http://creativecommons.org/licenses/by/4.0/
Received: Jun.7th, 2017; accepted: Jul.2nd.2017; published: Oct.15th, 2017
AbstractThe problems of the current mud logging plot drawing system in China were summarized, a system design scheme involving multiple design patterns based on the basic concepts, the use purpose and the basic elements of system design pattern was proposed.In view of the non-uniform features of the foreign mud logging plot pattern, the loading method of combinations of template and data was adopted in the system design and the interface of data entry was generated automatically through the templates.This system design supports a variety of database systems and can output the graphics quickly.This paper also analyzes the usage characteristics of four design patterns including MVC, Observer, Abstract Factory and Composite and elaborates the application of the design pattern in each function module in detail.
KeywordsMud Logging Plot, Design Patterns, Template
近年來,國內(nèi)錄井公司在國外的業(yè)務(wù)不斷增多,市場不斷擴(kuò)大,但與國外錄井公司相比,技術(shù)上還有一定差距,如錄井圖繪制系統(tǒng)。錄井圖是集測井、錄井、地質(zhì)、地化等勘探數(shù)據(jù)信息為一體的成果圖,描述了鉆井過程中地層在縱向上的變化情況,直觀反映了油氣在地層中的分布特征。目前國內(nèi)的錄井圖繪制系統(tǒng)不能滿足國外用戶的需求,主要包括:國外圖例、含油氣等繪制方式與國內(nèi)標(biāo)準(zhǔn)不同;曲線、符號等圖元設(shè)置修改操作繁瑣;數(shù)據(jù)錄入與錄井圖成圖相分離。國內(nèi)錄井公司購買國外錄井圖繪制軟件又非常昂貴,后期維護(hù)困難。基于以上原因,開發(fā)了能夠滿足國外用戶需求的錄井圖繪制系統(tǒng),采用多種設(shè)計模式,使系統(tǒng)操作更靈活、功能擴(kuò)展更方便。
設(shè)計模式(design pattern)是面向?qū)ο筌浖O(shè)計的經(jīng)驗總結(jié),是特定場景下解決某一類常見問題的核心方案。使用設(shè)計模式的目的就是復(fù)用這些面向?qū)ο筌浖O(shè)計,更好地提高代碼的可重用性和可維護(hù)性,降低各模塊間的強(qiáng)耦合度。
每種設(shè)計模式對于一類通用設(shè)計結(jié)構(gòu)的關(guān)鍵要素進(jìn)行了命名、抽象和標(biāo)識,這些設(shè)計結(jié)構(gòu)能被用來構(gòu)造可復(fù)用的面向?qū)ο笤O(shè)計。一般而言,模式有4個基本要素:模式名稱、問題、解決方案和效果。“模式名稱”描述了問題、解決方案和效果;“問題”描述了應(yīng)在何種情況下使用設(shè)計模式;“解決方案”描述了一個設(shè)計的各個組成部分以及各組成部分之間的相互關(guān)系;“效果”描述了使用后的結(jié)果[1]。
錄井圖繪制系統(tǒng)LogMaker主要涉及以下4種設(shè)計模式。
1)MVC設(shè)計模式:包括3個基本部分:Model (模型)、View (視圖)和Controller (控制器)。模型用來維護(hù)數(shù)據(jù)并提供數(shù)據(jù)訪問方法;視圖負(fù)責(zé)數(shù)據(jù)的顯示;控制器用來處理用戶的請求。
2)Observer設(shè)計模式:由Subject (目標(biāo))-Observer (觀察者)兩部分構(gòu)成,當(dāng)目標(biāo)的狀態(tài)發(fā)生改變時,向它的各個觀察者發(fā)出通知,觀察者將對觀察目標(biāo)的改變做出響應(yīng)。
3)Abstract Factory設(shè)計模式:提供一個創(chuàng)建一系列相關(guān)或相互依賴對象的接口,而無需指定它們具體的類[2]。
4)Composite設(shè)計模式:是一個以樹形結(jié)構(gòu)描述整體與部分關(guān)系的模式。它使得客戶端可以向處理單個對象一樣處理由他們復(fù)合而成的合成對象。
筆者提出的錄井圖繪制系統(tǒng)LogMaker架構(gòu)如圖1所示,從功能上分為6個模塊:數(shù)據(jù)庫模塊、模板編輯模塊、數(shù)據(jù)錄入管理模塊、巖性圖例管理模塊、符號管理模塊、成圖模塊。
數(shù)據(jù)庫模塊主要負(fù)責(zé)數(shù)據(jù)庫連接,將數(shù)據(jù)庫的數(shù)據(jù)進(jìn)行抽象化,切割數(shù)據(jù)和數(shù)據(jù)庫的邏輯聯(lián)系,以應(yīng)對多種數(shù)據(jù)持久化方案,并對其他模塊提供數(shù)據(jù)支持。目前該系統(tǒng)支持Sql Server2000、Sql Server 2005、Oracle多種數(shù)據(jù)庫。模板編輯模塊實現(xiàn)模板的可視化管理,能夠定制錄井圖需顯示的內(nèi)容,包括圖頭井基本信息、圖尾制圖信息、直線、表格、圖例、符號、圖片等圖元和曲線、標(biāo)尺、剖面、文本描述等圖道。在模板編輯模塊中,還實現(xiàn)了模板的導(dǎo)入和導(dǎo)出功能,便于模板的共享。數(shù)據(jù)錄入管理模塊根據(jù)模板定制內(nèi)容自動生成數(shù)據(jù)錄入表格,用戶可連續(xù)輸入,并支持 Excel文件導(dǎo)入導(dǎo)出。成圖模塊調(diào)用數(shù)據(jù)庫模塊讀取模板內(nèi)容和相關(guān)數(shù)據(jù),繪制成圖。用戶可在圖件上進(jìn)行文字和圖形標(biāo)注,并和圖件一起保存在數(shù)據(jù)庫中。在巖性圖例和符號管理模塊中可新建、編輯、刪除巖性圖例和符號,生成的圖例和符號被顯示在模板編輯模塊、數(shù)據(jù)錄入模塊和成圖模塊中。
錄井圖繪制系統(tǒng) LogMaker具有良好的用戶界面和人機(jī)交互性,每種圖元對象都有顯示、編輯、刪除等功能,每個圖道都可以任意拖拽、移動,操作方便靈活。
錄井圖繪制系統(tǒng) LogMaker采用模板驅(qū)動方式,模板是表格、曲線、文本、圖例、符號等圖元按照一定方式排列、組合、疊加構(gòu)成的。當(dāng)需要繪制特定格式錄井圖時,只需將相應(yīng)模板與數(shù)據(jù)結(jié)合。在系統(tǒng)的具體功能實現(xiàn)中,將MVC、Observer、Abstract Factory和Composite設(shè)計模式應(yīng)用于開發(fā)中,從而提高系統(tǒng)在擴(kuò)展和維護(hù)方面的能力。
MVC設(shè)計模式是圖形用戶界面軟件經(jīng)常使用的一種結(jié)構(gòu)(圖2)。通過模型(Model)、視圖(View)和控制器(Controller)相互分離,使系統(tǒng)結(jié)構(gòu)變得更清晰、更容易擴(kuò)展和使用。在該系統(tǒng)中,View提供用戶交互界面,負(fù)責(zé)圖元的繪制和存放繪制相關(guān)的數(shù)據(jù),如顏色、線性、圖元屬性等;Model處理數(shù)據(jù)的讀取和保存;Controller負(fù)責(zé)處理用戶的請求,完成圖元的創(chuàng)建和屬性編輯。
Figure 2.The relation schema of MVC圖2.MVC關(guān)系圖
在曲線繪制功能實現(xiàn)中,log_curve_column_view類的m_curveProp變量包含了曲線繪制方式、線型等曲線屬性,該變量通過 GetCurveProp()方法取得。log_curve_column_model類中 GetCurveInfo()和SetCurveInfo()方法主要用來獲取和保存曲線表名、曲線名等數(shù)據(jù)信息。log_curve_column_controller類主要負(fù)責(zé)表格、直線等圖元的創(chuàng)建,靜態(tài)文本、動態(tài)文本的編輯以及字體、邊框、表格拆分等屬性的設(shè)置(圖 3)。
Figure 3.The MVC identifying plot of the drawing function圖3.曲線繪制功能MVC類圖
在 MVC框架中,每個圖元都作為一個獨立的對象存在,模型(Model)作為圖元的數(shù)據(jù)載體與視圖(View)分離。通過Observer設(shè)計模式(圖4),在視圖、控制器和模型之間建立一種訂閱/通知協(xié)議,一旦模型的數(shù)據(jù)發(fā)生變化,模型將通知有關(guān)視圖進(jìn)行更新。
Figure 4.The classifying diagram of Observer design pattern圖4.Observer設(shè)計模式類圖
在該系統(tǒng)中,數(shù)據(jù)發(fā)生變化后,模型通過ToNotify()方法通知觀察者iView更新,iView在收到指令后,對應(yīng)圖元視圖的Update方法被調(diào)用。
錄井圖繪制系統(tǒng)LogMaker在視圖和模型創(chuàng)建時都運(yùn)用了Abstract Factory設(shè)計模式,現(xiàn)以視圖工廠為例進(jìn)行說明。系統(tǒng)中的所有視圖類的大部分方法是一致的,主要有Render (CView* pView, CDC* pDC)、Update (DesignPattern::Observer::Subject* subj)、GetColumnWidth()、SetColumnWidth()等,對于不同類型的視圖,這些方法的實現(xiàn)內(nèi)容卻是不一樣的。為了實現(xiàn)具體視圖類和方法的分離,首先將這些方法抽象為接口,如圖5所示。
Figure 5.The view interface圖5.視圖接口
所有的具體視圖類都繼承該接口,實現(xiàn)接口中所定義的方法,而系統(tǒng)根據(jù)需要對具體的工廠進(jìn)行實例化,并引用工廠對象創(chuàng)建具體視圖對象,如圖6所示。
Figure 6.The classifying plot of Abstract Factory view圖6.視圖Abstract Factory模式類圖
除視圖工廠外,數(shù)據(jù)庫模塊也應(yīng)用了Abstract Factory設(shè)計模式。如果增加新的數(shù)據(jù)存儲類型mysql,只要添加mysql數(shù)據(jù)庫讀寫類和mysql工廠類,其他代碼不動就可以支持新的數(shù)據(jù)庫,有效地提高了系統(tǒng)的可維護(hù)性和擴(kuò)展性。
錄井圖是一種基礎(chǔ)圖形,包括2種圖元:基本圖元(曲線、標(biāo)尺、符號、文字、單元格等)和組合圖元。其中組合圖元也是由基本圖元組合而成。在系統(tǒng)圖道繪制中,使用了 Composite設(shè)計模式,首先定義基本圖元的容器類Component,然后再定義Composite類和Leaf類。如果是Leaf子類接收到指令,則直接處理;如果是Composite子類,它將請求發(fā)送給它的子類,即圖元。系統(tǒng)中的曲線道、符號道、標(biāo)尺道、巖屑剖面道等都采用Composite設(shè)計模式實現(xiàn)。Composite模式遞歸定義復(fù)合圖元類,創(chuàng)建“整體與部分”的樹形結(jié)構(gòu)。
如圖7所示,well_column_view類繼承于Composite類,對應(yīng)于圖道組合,圖道組合下面包括曲線道、符號道、標(biāo)尺道等。log_curve_column_view類也繼承于 Composite類,對應(yīng)于曲線道,用來存儲log_curve_child_column_view類的實例。log_curve_child_column_view類就是對應(yīng)的Leaf類的子類,代表曲線道上的每條曲線。
Figure 7.The Composite pattern of curve tract圖7.曲線道Composite類圖
該系統(tǒng)生成的錄井圖(如圖8)包括圖頭、圖體和圖尾。圖頭以表格形式顯示某口井的基本信息、圖片、圖例和符號。圖體則由井深、曲線、油氣顯示、巖性剖面、巖性百分比剖面、巖性描述等圖道組成。圖尾可顯示制圖信息。
Figure 8.The diagram of Masterlog圖8.Masterlog圖
除了繪圖功能外,系統(tǒng)還具有放大、縮小、打印、定時刷新圖件等功能,每次刷新后,新數(shù)據(jù)便顯示在錄井圖上。此外,鼠標(biāo)懸停在某個圖道時,系統(tǒng)自動彈出提示框,顯示鼠標(biāo)所在位置的井深等信息。
簡要介紹了設(shè)計模式,詳細(xì)闡述了基于設(shè)計模式的錄井圖繪制系統(tǒng)logMaker的設(shè)計與實現(xiàn)。多種設(shè)計模式的運(yùn)用,使系統(tǒng)具有靈活易用、易擴(kuò)展、易維護(hù)的特點,彌補(bǔ)了國內(nèi)錄井圖繪制軟件在國外應(yīng)用上的不足,滿足了用戶多樣性的需求,為錄井公司拓展海外市場提供了有力技術(shù)支撐。
References)
[1]孟曦.基于設(shè)計模式的多無人機(jī)地面站視景仿真系統(tǒng)設(shè)計與實現(xiàn)[D]: [碩士學(xué)位論文].成都: 電子科技大學(xué),2013.
[2]董智鵬.基于MVC設(shè)計模式的科研社交系統(tǒng)的設(shè)計與實現(xiàn)[D]: [碩士學(xué)位論文].北京: 中國科學(xué)院大學(xué)(工程管理與信息技術(shù)學(xué)院), 2014.
[編輯]黃鸝
知網(wǎng)檢索的兩種方式:
1.打開知網(wǎng)頁面http://kns.cnki.net/kns/brief/result.aspx?dbPrefix=WWJD下拉列表框選擇:[ISSN],輸入期刊ISSN:2471-7185,即可查詢
2.打開知網(wǎng)首頁http://cnki.net/左側(cè)“國際文獻(xiàn)總庫”進(jìn)入,輸入文章標(biāo)題,即可查詢
投稿請點擊:http://www.hanspub.org/Submission.aspx
期刊郵箱:jogt@hanspub.org
Design and Implementation of Mud Logging Plot Drawing System LogMaker Based on Design Patterns
Lijuan Wang
Great Wall Drilling Company Mud Logging Company, CNPC, PanJin LiaoNing
2017年6月7日;錄用日期:2017年7月2日;發(fā)布日期:2017年10月15日
王麗娟(1980-),女,工程師,現(xiàn)從事軟件研發(fā)推廣方面的工作。
文章引用: 王麗娟.基于設(shè)計模式的錄井圖繪制系統(tǒng) LogMaker的設(shè)計與實現(xiàn)[J].石油天然氣學(xué)報, 2017, 39(5):191-198.
10.12677/jogt.2017.395083