□張娟萍
(山西交通職業(yè)技術(shù)學(xué)院,山西 太原 030031)
隨著軟件開發(fā)行業(yè)的不斷發(fā)展,越來越多的企業(yè)利用計算機來管理企業(yè)的日常經(jīng)營、生產(chǎn)和銷售等活動,要是讓每個企業(yè)都去開發(fā)新的軟件系統(tǒng)不是很現(xiàn)實,但如果能夠在一個已有的軟件開發(fā)框架下增加上自己企業(yè)特別的管理功能模塊就相當(dāng)理想了,這就為二次開發(fā)平臺提供了廣闊的運用空間。二次開發(fā)平臺是指在某個已有的開發(fā)體系架構(gòu)下對一個基于此開發(fā)框架開發(fā)的應(yīng)用軟件進(jìn)行功能擴充的平臺。二次開發(fā)平臺的產(chǎn)生和發(fā)展都有其必然性和歷史性,一個良好的應(yīng)用軟件系統(tǒng)必然有一個與之對應(yīng)的二次開發(fā)平臺。正是基于此,針對二次開發(fā)平臺的理論和技術(shù)的相關(guān)問題進(jìn)行了分析與討論。
1.敏捷信息系統(tǒng)。敏捷信息系統(tǒng)(Agile Information System)是一種由計算機(包括網(wǎng)絡(luò))、人和管理規(guī)則集成的信息化系統(tǒng)。該系統(tǒng)是為組織或企業(yè)的作業(yè)、管理和決策提供有用的信息支持。它利用的是手工規(guī)程,計算機的軟硬件,數(shù)據(jù)模型和數(shù)據(jù)庫,其中數(shù)據(jù)模型和數(shù)據(jù)庫用于分析、計劃、控制和決策。
隨著經(jīng)濟的發(fā)展和計算機技術(shù)的廣泛應(yīng)用,越來越多的企業(yè)期望利用計算機來管理企業(yè)日常經(jīng)營、生產(chǎn)、銷售活動,以此提高企業(yè)的競爭力。但這并不意味著企業(yè)采用了信息管理系統(tǒng)其競爭力及生存狀況就一定能得到提高。
敏捷信息系統(tǒng)是隨著市場全球化而產(chǎn)生,隨著企業(yè)之間競爭的激烈而發(fā)展。敏捷信息系統(tǒng)的產(chǎn)生和發(fā)展的過程和現(xiàn)代管理理論的發(fā)展是相對應(yīng)的,所以,敏捷信息系統(tǒng)基本呈扁平的網(wǎng)狀結(jié)構(gòu),形成自主管理、分布式、講究輕薄和柔性的分布式、多元化、網(wǎng)絡(luò)化的體系結(jié)構(gòu)。
敏捷信息系統(tǒng)具備的特征:能夠信息集成和輔助決策;有標(biāo)準(zhǔn)的信息交換接口,能實現(xiàn)無縫傳遞信息;能夠推翻原有的設(shè)計模式和實現(xiàn)方法,具備敏捷性系統(tǒng)的可重構(gòu)、可重用和可擴展性;能夠根據(jù)不同的要求和管理功能進(jìn)行重組;能夠隨“任務(wù)”的開始而誕生,隨“任務(wù)”的結(jié)束而自行解體,因此具有時效性。
2.面向服務(wù)的體系結(jié)構(gòu)。近來比較流行的一種架構(gòu)技術(shù)是面向服務(wù)的體系結(jié)構(gòu)和思想。面向服務(wù)的體系結(jié)構(gòu)是一個組件模型,它將應(yīng)用程序的不同功能單元通過這些服務(wù)之間定義良好的接口和契約聯(lián)系起來。體系結(jié)構(gòu)需要硬件平臺、操作系統(tǒng)和編程語言來實現(xiàn)服務(wù),而接口是獨立于它們的,因為它是采用中立的方式定義的。這便能達(dá)到所構(gòu)建的軟件和其他軟件之間互相通信的目的。
面向服務(wù)的體系結(jié)構(gòu)為二次開發(fā)的實現(xiàn)提供了一種方法,此方法是以構(gòu)建系統(tǒng)的元素形式存在的,主要分為功能元素和服務(wù)質(zhì)量元素兩大類,就組成面向服務(wù)的體系結(jié)構(gòu)的元素而言,其為實現(xiàn)二次開發(fā)從功能與質(zhì)量方面均提供了有力保證。
面向服務(wù)體系的三種角色分別是:服務(wù)提供者,服務(wù)注冊中心和服務(wù)請求者。面向服務(wù)的體系結(jié)構(gòu)中的每個組件都扮演著服務(wù)提供者、服務(wù)請求者和服務(wù)注冊中心這三種角色中的某一種(或多種)。面向服務(wù)體系的三種操作分別是:發(fā)布操作,查找操作和綁定操作。
面向服務(wù)體系中的不同角色的工作流程如下圖1所示:
圖1 面向服務(wù)體系中不同角色的工作流程
面向服務(wù)體系有以下五個特性:(1)可重用性。即一個服務(wù)創(chuàng)建后可以用于多個應(yīng)用和業(yè)務(wù)流程。(2)松耦合性。(3)明確定義的接口。服務(wù)交互必須是明確定義的。服務(wù)請求者不需要知道服務(wù)究竟是由哪種程序設(shè)計語言編寫的。(4)無狀態(tài)的服務(wù)設(shè)計。服務(wù)應(yīng)該是獨立的、自包含的請求,在實現(xiàn)時它不需要獲取從一個請求到另一個請求的信息或狀態(tài)。(5)基于開放標(biāo)準(zhǔn)。
1.反射技術(shù)。很多時候,反射為程序的動態(tài)性提供了一種可能,從而成了在程序開發(fā)設(shè)計中不可缺少的一種技術(shù)。其在主流的開發(fā)工具中應(yīng)用廣泛,如:在Java中,反射技術(shù)可以根據(jù)類名生成類的實例,獲取類的相關(guān)方法名稱、調(diào)用方法等;在Spring框架中,其依賴注入的基礎(chǔ)亦建立在反射技術(shù)的基礎(chǔ)之上。反射技術(shù)大量應(yīng)用于主流開發(fā)工具的理由很多,但其可以通過降低程序模塊的耦合性從而優(yōu)化系統(tǒng)的穩(wěn)定性、可靠性并可以通過后期綁定保證系統(tǒng)良好的可擴展性是主要原因。反射機制一般可以提供以下功能:
* 在運行時判斷任意一個對象所屬的類
* 在運行時構(gòu)造任意一個類的對象
* 在運行時判斷任意一個類所具有的成員變量和方法
* 在運行時調(diào)用任意一個對象的方法
例如,在使用Java進(jìn)行實時開發(fā)時,可以利用反射來分配線程,其首先設(shè)置一個優(yōu)先級值來確定期望的線程類型,根據(jù)類名稱實例化實時線程或常規(guī)線程而無需與類路徑上的實時類一起編譯。
在微軟的.net中,反射是一個運行庫類型發(fā)現(xiàn)的過程。舉例來說,通過反射,可以得到一個給定的程序集所包含的所有類型的列表,這個列表包括給定類型中定義的方法、字段、屬性和事件。也可以動態(tài)地發(fā)現(xiàn)一組給定類支持的接口、方法的參數(shù)和其他相關(guān)細(xì)節(jié)。如果想要通過類的程序集名和該類的名稱去動態(tài)地創(chuàng)建該類,調(diào)用該類的方法,屬性,甚至跨過訪問修飾符的限定去調(diào)用保護的、私有的方法和屬性也都能利用反射技術(shù)實現(xiàn)。這樣就可以用比較方便的方法來實現(xiàn)一個更為高效的框架,這樣的框架不需要關(guān)心類的具體的實現(xiàn)就能夠調(diào)用類的方法,實現(xiàn)了每個程序的按需組裝,很大程度上提高了應(yīng)用程序的靈活性和可擴展性。
在微軟的.net框架中,應(yīng)用程序的結(jié)構(gòu)被劃分為一個單樹結(jié)構(gòu),按照層級依次為應(yīng)用程序域、程序集、模塊、類型和成員。當(dāng)運行一個程序時,公共語言運行庫首先加載管理器,然后創(chuàng)建并管理應(yīng)用程序域,接著在應(yīng)用程序域中加載并控制每個程序集中類型層次結(jié)構(gòu)的內(nèi)存布局。
程序集中包含模塊,模塊中又包含類型,而類型中又包含成員,反射技術(shù)則提供了相應(yīng)的對象,能夠?qū)⒊绦蚣?、模塊和類型都進(jìn)行封裝。使用反射技術(shù),可以從現(xiàn)有對象中獲取類型,再訪問其字段和屬性或者調(diào)用類型的方法,還可以動態(tài)地創(chuàng)建類型的實例并將類型綁定到現(xiàn)有對象。
2.動態(tài)編碼技術(shù)。CodeDOM是代碼文檔對象模型(Code Document Object Model)的縮寫,它允許.Net開發(fā)者以多種語言在運行時產(chǎn)生和編譯源代碼。CodeDOM是用于描述源代碼的類的一個集合。一旦源代碼被描述為CodeDOM,它就能被打印、編譯成匯編語言、或編譯到內(nèi)存中并執(zhí)行。應(yīng)用程序也能使用CodeDOM,作為閱讀源代碼的一個抽象層,而無需有具體語言的內(nèi)部知識。
CodeDOM提供可用于表示(獨立于編程語言之外的)源代碼的類、接口和結(jié)構(gòu),這就意味著CodeDOM是不依賴于某一種編程語言的?;诖巳藗兛梢缘贸鲆韵掠^點:利用Code-DOM技術(shù)動態(tài)產(chǎn)生代碼,不需要具有某一種特定語言的編程知識,只要知道業(yè)務(wù)邏輯規(guī)則,按照自然語言的書寫風(fēng)格即可產(chǎn)生合格的代碼。CodeDOM能將任何表示形式輸出為以CodeDOM所支持的任何語言表示的源代碼,在.NET Framework 2.0 中,CodeDOM 支持 VB.NET,C#,JScript的代碼生成器和代碼編譯器。
CodeDOM技術(shù)的優(yōu)點如下:
(1)CodeDOM是用單一模式來表現(xiàn)源代碼。
(2)CodeDOM可以允許程序員動態(tài)的創(chuàng)建、編譯和編碼程序。
(3)CodeDOM可以通過CodeDOM對象圖生成不同語言的源代碼。
3.插件技術(shù)。不同應(yīng)用軟件的體系結(jié)構(gòu)和開發(fā)方法隨著計算機技術(shù)的發(fā)展的不斷變化而改變。我們一直在尋找更好的軟件體系結(jié)構(gòu)和開發(fā)方法來實現(xiàn)軟件開發(fā)效率和產(chǎn)品質(zhì)量的提高,增加軟件的可擴展性。插件技術(shù)之所以能夠被越來越多的應(yīng)用,就是由于它能夠滿足以上要求。采用插件技術(shù)已經(jīng)成功開發(fā)出了當(dāng)前很多非常實用的軟件產(chǎn)品。比如說我們常用的圖像編輯軟件PhotoShop就是一個典型的例子。使用過PhotoShop的人對濾鏡一定不陌生。即使是初涉圖形制作的新手,只要去獲取一些好的濾鏡,也能夠輕易地作出特殊效果。還有就是MP3播放軟件Winamp也大量的應(yīng)用了插件技術(shù)。Winamp早期的成功雖然在于其快速的解碼引擎,但在MP3播放器中能夠保持重要地位,也正是由于內(nèi)置了健全的Skin和PlugIn(插件)。后期的Winamp中增加的midi、mod、wava等音樂格式的播放功能完全是靠插件技術(shù)來實現(xiàn)的。插件技術(shù)將程序按照其功能的不同劃分為一個個插件,它們之間沒有任何依賴次序,相互獨立,因此這樣的組件式結(jié)構(gòu)非常靈活。插件是可獨立開發(fā)的程序模塊,它不僅獨立于系統(tǒng),而且能夠動態(tài)地插入到系統(tǒng)中,還可以被自由地插入、替換和刪除。
最早的時候Erich Gama提出了插件技術(shù)的設(shè)計模式。該模式通用的通信模型是利用對象思想和架構(gòu)來實現(xiàn)的。只要組件的結(jié)構(gòu)相似,不管輸入和輸出是否相同,該設(shè)計模式都能利用面向?qū)ο蟮睦碚搧韼椭_發(fā)者解決問題。它只是描述解決問題方案的語言,而不用去管編程語言的具體細(xì)節(jié)。其關(guān)鍵點在于把整個方案如何根據(jù)功能進(jìn)行分解,從而不同程序按照不同功能分解開來執(zhí)行完成。插件技術(shù)就是利用這個原理,將程序劃分為主程序和子程序兩部分。在主程序的框架中來運行子程序,實際的業(yè)務(wù)操作由子程序完成,它都是按照一定的規(guī)范來編寫的。只要接口相同,主程序就可以通過反射技術(shù)最大靈活地動態(tài)加載子程序。
二次開發(fā)平臺,簡單來說就是讓開發(fā)人員利用已有的軟件框架快速地開發(fā)出符合其體系結(jié)構(gòu)的應(yīng)用程序,從而達(dá)到企業(yè)的要求。但在實際二次開發(fā)的過程中,往往不是原來軟件的編寫人員作為二次開發(fā)的技術(shù)人員,他們根本不知道原來軟件的體系架構(gòu),甚至根本不了解原來軟件的編程邏輯,這樣就會影響到二次開發(fā)的進(jìn)度。二次開發(fā)人員如果不了解原來軟件中的內(nèi)部邏輯,僅僅按照自己的開發(fā)技術(shù)水平的理解重新編寫程序,而不是有效的復(fù)用原來存在的程序邏輯,就大大降低了軟件開發(fā)的效率,嚴(yán)重時會對整個程序產(chǎn)生不可預(yù)見的重大影響。這樣就會影響用戶的正常工作。為了保證二次開發(fā)的順利進(jìn)行,現(xiàn)將二次開發(fā)的開發(fā)要點總結(jié)如下:
要進(jìn)行二次開發(fā),則必須保證平臺是開放的并提供了進(jìn)行二次開發(fā)的相關(guān)工具,這樣才有可能在現(xiàn)有的軟件框架下開發(fā)出滿足用戶需求且符合平臺的固有框架;要進(jìn)行二次開發(fā),則必須清楚二次開發(fā)的類型,一般包括功能擴充、功能覆蓋、新增功能三種類型,只有在確定了類型之后,才可確定工作量及所需的技術(shù)力量;要進(jìn)行二次開發(fā),則必須進(jìn)行整體設(shè)計,并盡可能地使二次開發(fā)的功能與原平臺保證相對的獨立性,以插件的形式來提供,如IBM公司的Rational系列軟件,都是基于Eclipse平臺進(jìn)行二次開發(fā)的典型案例,便是以插件的形式進(jìn)行二次開發(fā)的;要進(jìn)行二次開發(fā),最好選擇本身就是以面向服務(wù)的體系結(jié)構(gòu)進(jìn)行組織的二次開發(fā)平臺,這樣可以在減少功能開發(fā)難度的同時保證二次開發(fā)的質(zhì)量。
文章主要通過對二次開發(fā)平臺理論及技術(shù)方面的研究,尤其是對面向服務(wù)的體系結(jié)構(gòu)和插件技術(shù)的深入分析,最終得出了二次開發(fā)平臺的開發(fā)要點,為進(jìn)行二次開發(fā)的編程人員在某種程度上提出了指導(dǎo)性的參考意見。在此研究基礎(chǔ)上,今后可以具體的為二次開發(fā)的開發(fā)模式及技術(shù)方面作進(jìn)一步的探討。
[1]張育平.基于構(gòu)件的軟件體系結(jié)構(gòu)實現(xiàn)技術(shù)[J].計算機工程與應(yīng)用,2010,(4).
[2]胡開順.企業(yè)集群化與制造系統(tǒng)敏捷化策略的拓展[J].工業(yè)工程,2010,(1).
[3]王 森.基于U8-ERP的二次開發(fā)平臺的研究[D].上海:復(fù)旦大學(xué),2007,(8).