敏捷構(gòu)建-面向企業(yè)應(yīng)用的開發(fā)平臺
最近寫了篇文章,貼出來供大家分享
題目 敏捷構(gòu)建-面向企業(yè)應(yīng)用的開發(fā)平臺
摘 要: 隨著企業(yè)軟件應(yīng)用的逐步深化,客戶對軟件開發(fā)的工期、質(zhì)量等要求越來越高,軟件開發(fā)成本持續(xù)升高,所以軟件企業(yè)的應(yīng)用開發(fā)必須從高效率、高質(zhì)量的角度出發(fā),采用敏捷構(gòu)建的方法,實現(xiàn)快速開發(fā)、交付、實施,而這一切必須依托一套完成的軟件開發(fā)平臺解決方案,只有這樣才能適應(yīng)當(dāng)前軟件行業(yè)的需要,在激烈的競爭中,特別是參與國際化的競爭中,保持領(lǐng)先地位。
當(dāng)前業(yè)界,無論是高級管理者還是普通開發(fā)人員,都已經(jīng)達成共識,對于IT技術(shù)公司,平臺是基礎(chǔ)設(shè)施,不管面向的業(yè)務(wù)領(lǐng)域是什么,都必須基于一個平臺去構(gòu)建,無論是個性化IT服務(wù),軟件產(chǎn)品,還是電子商務(wù),門戶網(wǎng)站,抑或是SOA,SAAS,云服務(wù),云計算,凡是成規(guī)模的企業(yè),都是基于平臺運作。凡是還在從頭開始編碼的公司,要么被淘汰了,要么即將被淘汰。是否具備基礎(chǔ)平臺或構(gòu)建平臺的能力已經(jīng)成為軟件企業(yè)核心競爭力之一。
企業(yè)應(yīng)用軟件提供商可以通過多年積累對主要的行業(yè)解決方案和主打的項目類別進行一些產(chǎn)品、系統(tǒng)的固化,形成積累,從而在后續(xù)同類方案、同類項目中實現(xiàn)以往研發(fā)成果的復(fù)用、減少人員投入,這樣就可以解放出更多的人力來拓展其他項目,獲取更多收入,提高企業(yè)的生產(chǎn)效率。瑞友科技的GAP平臺就是這樣的研發(fā)積累形成的平臺產(chǎn)品。GAP平臺全稱是UFIDA Software Engineering Global Application Platform,是北京瑞友科技股份公司集多年應(yīng)用開發(fā)實施經(jīng)驗所提煉的快速應(yīng)用開發(fā)平臺。
本文主要闡述了GAP平臺的整體架構(gòu),以及在平臺的開發(fā)過程中采用的一些創(chuàng)新性的技術(shù),包括面向業(yè)務(wù)服務(wù)的開發(fā)(SOA),領(lǐng)域驅(qū)動設(shè)計(Domain-Driven Design),基于資源文件的組件技術(shù),工作流技術(shù)等,基于此可以實現(xiàn)企業(yè)應(yīng)用軟件開發(fā)的敏捷構(gòu)建,并形成一個完成的企業(yè)應(yīng)用軟件生態(tài)圈,技術(shù)、業(yè)務(wù)、解決方案、外圍應(yīng)用集成相輔相成,將極大的提高IT服務(wù)企業(yè)的核心競爭力,也是企業(yè)應(yīng)用開發(fā)領(lǐng)域中的模式創(chuàng)新。
關(guān)鍵詞: 企業(yè)應(yīng)用,開發(fā)平臺,領(lǐng)域驅(qū)動,業(yè)務(wù)服務(wù),組件技術(shù)
1 綜述
1.1 背景
隨著企業(yè)軟件應(yīng)用的逐步深化,客戶對軟件開發(fā)的工期、質(zhì)量等要求越來越高,軟件開發(fā)成本持續(xù)升高,所以軟件企業(yè)的應(yīng)用開發(fā)必須從高效率、高質(zhì)量的角度出發(fā),采用敏捷構(gòu)建的方法,實現(xiàn)快速開發(fā)、交付、實施,而這一切必須依托一套完成的軟件開發(fā)平臺解決方案,只有這樣才能適應(yīng)當(dāng)前軟件行業(yè)的需要,在激烈的競爭中,特別是參與國際化的競爭中,保持領(lǐng)先地位。
從應(yīng)用開發(fā)和應(yīng)用外包的具體內(nèi)容綜合來看,兩者有很大一部分其實描述的是相同的服務(wù)內(nèi)容,只是具體實施者或服務(wù)提供者有所不同,由于服務(wù)提供方和提供形式的差異形成不同的商業(yè)形態(tài),但從服務(wù)內(nèi)容根本上完全可以看作是同類內(nèi)容。對于這部分相同的內(nèi)容,就是圍繞企業(yè)級應(yīng)用系統(tǒng)生命周期而產(chǎn)生的各種IT服務(wù)。這部分內(nèi)容可以統(tǒng)稱為“應(yīng)用服務(wù)”。
所謂應(yīng)用服務(wù),就是專業(yè)服務(wù)商為企業(yè)客戶的管理類應(yīng)用系統(tǒng)提供他們需要所有服務(wù)的統(tǒng)稱。應(yīng)用服務(wù)是IT服務(wù)的一個重要細分市場。它的主要特點有三個:(1)必須基于統(tǒng)一的平臺;(2)提供覆蓋應(yīng)用系統(tǒng)的全生命周期服務(wù);(3)服務(wù)形式多樣。所以,一般情況下,應(yīng)用服務(wù)也可以籠統(tǒng)地稱為“基于平臺的IT服務(wù)”。
由此可見,對于應(yīng)用軟件開發(fā)商,平臺是基礎(chǔ)設(shè)施,不管面向的業(yè)務(wù)領(lǐng)域是什么,都必須基于一個平臺去構(gòu)建,無論是個性化IT服務(wù),軟件產(chǎn)品,還是電子商務(wù),門戶網(wǎng)站,抑或是SOA,SAAS,云服務(wù),云計算,凡是成規(guī)模的企業(yè),都是基于平臺運作。如何去構(gòu)建平臺,有多種方式,一般情況下,企業(yè)應(yīng)用軟件提供商可以通過多年積累對主要的行業(yè)解決方案和主打的項目類別進行一些產(chǎn)品、系統(tǒng)的固化,形成積累,從而在后續(xù)同類方案、同類項目中實現(xiàn)以往研發(fā)成果的復(fù)用、減少人員投入,這樣就可以解放出更多的人力來拓展其他項目,獲取更多收入,提高企業(yè)的生產(chǎn)效率。
瑞友科技的GAP平臺就是這樣的研發(fā)積累形成的平臺產(chǎn)品,是北京瑞友科技股份公司集多年應(yīng)用開發(fā)實施經(jīng)驗所提煉的快速應(yīng)用開發(fā)平臺。
Global Application Platform(以下簡稱GAP)平臺不僅是一套快速開發(fā)應(yīng)用軟件的輔助工具,而且提供了很高復(fù)用度的大規(guī)模軟件定制開發(fā)模式。作為開放性的開發(fā)平臺,GAP致力于解決當(dāng)前軟件開發(fā)過程中的三個關(guān)鍵問題:軟件過程問題,軟件復(fù)用問題,快速開發(fā)問題。并通過對這些問題的解決為客戶提供更好的軟件質(zhì)量、降低客戶的總體成本。GAP平臺致力于解決大規(guī)模的 JavaEE 項目中遇到的共性問題,提供完整的 JavaEE 架構(gòu)庫,解決JavaEE項目中遇到的80%以上共性的技術(shù)問題。提供集成快速開發(fā)工具,支持快速業(yè)務(wù)應(yīng)用定制開發(fā),從而提高開發(fā)效率,增加軟件的復(fù)用度,提升企業(yè)的項目交付能力,提高整個軟件企業(yè)的敏捷性。
GAP平臺基于SOA思想構(gòu)建,強調(diào)面向業(yè)務(wù)服務(wù)的架構(gòu)體系,基礎(chǔ)框架采取了輕量級的構(gòu)建方法,同時在開發(fā)中使用領(lǐng)域驅(qū)動開發(fā)方法和組件式設(shè)計來提高組件的復(fù)用率和靈活性。核心架構(gòu)控制在靈活輕量的規(guī)模內(nèi),以CBD(Component-Based Development)的方式集成平臺中的眾多模塊,強調(diào)組件內(nèi)部高內(nèi)聚,組件間保持松耦合,各組件既能獨立運行,也可以插件的方式集成到整個平臺體系中來,實現(xiàn)企業(yè)應(yīng)用開發(fā)的敏捷構(gòu)建。
1.2 應(yīng)用平臺特點
一般來說,面向企業(yè)應(yīng)用的快速開發(fā)平臺,應(yīng)該具備如下特點:
一、穩(wěn)定性
n 成熟清晰的分層架構(gòu)
n 具備多年項目積累
二、安全性
n 提供安全可靠的數(shù)據(jù)傳輸和存儲
n 多維度、細粒度的權(quán)限控制
三、規(guī)范性
n 基于業(yè)界成熟規(guī)范
n 完善的開發(fā)規(guī)范和指南
n 學(xué)習(xí)曲線低
四、擴展性
n 平臺基于SOA思想進行構(gòu)建
n 開放的API,面向接口編程
n 基于組件的設(shè)計,分層的開發(fā)思想
n 靈活適應(yīng)業(yè)務(wù)需求變更
五、全面的系統(tǒng)監(jiān)控
n 提供對日志、流程、數(shù)據(jù)和性能的分析監(jiān)控功能
六、提升開發(fā)效率
n 提供大量可復(fù)用組件和業(yè)務(wù)引擎
n 提供集成開發(fā)環(huán)境
n 敏捷構(gòu)建,快速實施
2 系統(tǒng)架構(gòu)
2.1 技術(shù)體系
GAP平臺的技術(shù)框架主要基于JavaEE技術(shù)體系構(gòu)建,遵循業(yè)界國際標(biāo)準(zhǔn),采用先進技術(shù),分層領(lǐng)域驅(qū)動,采用Spring技術(shù)、OSGi技術(shù)和O/R Mapping技術(shù),整合Web框架Struts和JSF,形成核心技術(shù)框架GAP-Mainframe,屏蔽異構(gòu)底層環(huán)境,為上層建筑提供各類基礎(chǔ)服務(wù)。目前GAP平臺的應(yīng)用系統(tǒng)、通用組件庫、業(yè)務(wù)組件庫和業(yè)務(wù)套件等,都是基于該技術(shù)體系進行構(gòu)建。
2.2 分層架構(gòu)
層級理論是構(gòu)建復(fù)雜系統(tǒng)的一個基本原則。對于軟件這樣復(fù)雜的人造事務(wù),發(fā)現(xiàn)層級和運用層級,是分析和解決問題的基本原則。軟件層級的劃分不但為解決復(fù)雜軟件開發(fā)探索一條可行的方法,同時也為應(yīng)用軟件產(chǎn)業(yè)鏈的完善起到推動作用,使得企業(yè)之間的協(xié)作關(guān)系更加清晰。
層(layer)這個概念在計算機領(lǐng)域是一個應(yīng)用相當(dāng)廣泛的概念。計算機本身就體現(xiàn)了一種層的概念:系統(tǒng)調(diào)用層、設(shè)備驅(qū)動層、操作系統(tǒng)層、CPU指令集。每個層都負責(zé)自己的職責(zé)。網(wǎng)絡(luò)同樣也廣泛存在層的概念,最著名的是OSI的七層協(xié)議。
使用層級理論最難的問題還是各個層都有些什么,以及要承擔(dān)何種責(zé)任。以往的軟件開發(fā)過程中大都自覺或者不自覺的利用層級理論來幫助提高開發(fā)效率。如抽象公共控件,開發(fā)基礎(chǔ)類,編寫開發(fā)輔助工具等行為都是層級理論的具體應(yīng)用。但是目前開發(fā)過程中普遍存在的問題是缺乏對整個應(yīng)用軟件進行系統(tǒng)、完整的層次劃分,從而導(dǎo)致軟件中各部分之間的服務(wù)關(guān)系不明了,對支撐平臺的開發(fā)缺乏明確的進度規(guī)劃和目標(biāo)。
GAP平臺在設(shè)計初期就對企業(yè)應(yīng)用軟件的層級進行了細致的劃分,并在長達6年的開發(fā)、構(gòu)建、完善過程中一直遵循這一分層架構(gòu)。GAP平臺的分層架構(gòu)圖如下:
(圖一)分層架構(gòu)圖
n 技術(shù)環(huán)境
主要指異構(gòu)的項目實施環(huán)境,由于瑞友科技提供的是個性化的IT服務(wù)而非標(biāo)準(zhǔn)化的產(chǎn)品,我們在項目開發(fā)、測試、實施的過程中必須面對各種各樣軟硬件環(huán)境,包括各種服務(wù)器、操作系統(tǒng)、應(yīng)用中間件、數(shù)據(jù)庫等。基于GAP平臺構(gòu)建的項目能夠保證項目可以運行在各種異構(gòu)的技術(shù)環(huán)境中,目前GAP平臺支持的操作系統(tǒng)有Windows Server、Aix、 Solaris、HP-Unix、Linux等,應(yīng)用中間件有WebLogic、WebSphere、Sun APP Server、JBoss、 Tomcat等,數(shù)據(jù)庫有Oracle、SQLServer、DB2等。
n 服務(wù)框架
是GAP平臺的核心和基礎(chǔ),它為構(gòu)建上層應(yīng)用系統(tǒng)提供各種基礎(chǔ)服務(wù)和擴展機制,包括日志服務(wù)、緩存服務(wù)、異常處理、事務(wù)處理、集群支持策略、分布式調(diào)用、配置服務(wù)、數(shù)據(jù)持久化、數(shù)據(jù)源服務(wù)、監(jiān)控服務(wù)等,除此之外,服務(wù)框架層還集成了多個web框架,包括struts和jsf,基于領(lǐng)域驅(qū)動思想提供了對JavaEE四層架構(gòu)的支持:
展現(xiàn)層:提供完善的界面展示框架和豐富的界面控件,解釋來自UI層的命令
控制層:用來協(xié)調(diào)應(yīng)用活動,轉(zhuǎn)發(fā)請求,處理調(diào)用方式等,它不包含業(yè)務(wù)邏輯,它不持有業(yè)務(wù)對象的狀態(tài)
領(lǐng)域?qū)樱罕緦影P(guān)于領(lǐng)域的信息。這是業(yè)務(wù)軟件的核心所在。在這里保留業(yè)務(wù)對象的狀態(tài),對業(yè)務(wù)對象和它們狀態(tài)的持久化被委托給了持久化層。
持久化層:本層作為其他層的支撐庫存在,它提供了數(shù)據(jù)對象之間的通信,實現(xiàn)對業(yè)務(wù)對象的持久化,屏蔽數(shù)據(jù)存儲層的環(huán)境影響。
n 引擎、組件和工具
服務(wù)框架層之上是基本的業(yè)務(wù)支撐引擎、通用組件和快速開發(fā)工具,支撐引擎包括工作流引擎、規(guī)則引擎、全文檢索引擎、報表引擎,通用組件包括組織權(quán)限、工作流平臺、消息平臺、接口服務(wù)平臺、業(yè)務(wù)日志、任務(wù)調(diào)度、站內(nèi)短信、預(yù)警平臺、內(nèi)容管理等,快速開發(fā)工具包括GAP-IDE、項目管理器、代碼生成器、數(shù)據(jù)字典等,這一層的組件把技術(shù)環(huán)境和具體業(yè)務(wù)邏輯進行了很好的隔離,在商業(yè)環(huán)境的運行規(guī)則發(fā)生改變的情況下,依然能保證整個系統(tǒng)的穩(wěn)定性。
n 業(yè)務(wù)組件
業(yè)務(wù)組件與通用組件不同,業(yè)務(wù)組件層主要包含為解決企業(yè)特定業(yè)務(wù)職能而抽象的業(yè)務(wù)模型及其實現(xiàn)。每個業(yè)務(wù)組件代表企業(yè)某個相對獨立業(yè)務(wù)或者業(yè)務(wù)鏈條,每個業(yè)務(wù)組件都具備相關(guān)的領(lǐng)域知識,基于每個領(lǐng)域的成熟解決方案構(gòu)建而成,這樣的業(yè)務(wù)組件不同于某個應(yīng)用系統(tǒng)中簡單劃分的業(yè)務(wù)模塊,它是高度抽象化,高度可擴展的。目前我們規(guī)劃的領(lǐng)域主要包括金融領(lǐng)域業(yè)務(wù)組件、保險領(lǐng)域業(yè)務(wù)組件、物流領(lǐng)域業(yè)務(wù)組件。
n 業(yè)務(wù)套件
業(yè)務(wù)組件層之上是業(yè)務(wù)套件,業(yè)務(wù)套件的概念是由GAP平臺項目創(chuàng)新性提出,它既不是傳統(tǒng)意義上的標(biāo)準(zhǔn)化成品,也不是細粒度的業(yè)務(wù)組件和技術(shù)組件,而是粗粒度的業(yè)務(wù)組件集合,每個領(lǐng)域的業(yè)務(wù)套件基于GAP平臺底層框架構(gòu)建,選取通用組件,引擎和該領(lǐng)域的業(yè)務(wù)組件進行擴展開發(fā),形成一系列該領(lǐng)域的業(yè)務(wù)套件。業(yè)務(wù)套件可以理解為傳統(tǒng)意義上的準(zhǔn)產(chǎn)品,
n 領(lǐng)域應(yīng)用
領(lǐng)域應(yīng)用層就是針對特定用戶特定項目進行的個性化項目開發(fā),解決特定領(lǐng)域的應(yīng)用問題,領(lǐng)域應(yīng)用層通常會依賴一個或多個業(yè)務(wù)套件,同時根據(jù)客戶的個性化需求還會使用到相關(guān)的業(yè)務(wù)組件、通用組件和支撐引擎。這是整個軟件結(jié)構(gòu)中的最上層,它調(diào)用下面各個層次的服務(wù),形成最終呈現(xiàn)給客戶優(yōu)質(zhì)的軟件產(chǎn)品。
五個層級自定向下依賴,形成一個完整的企業(yè)應(yīng)用開發(fā)解決方案。
2.3 功能架構(gòu)
目前GAP平臺的功能架構(gòu)如下:
(圖二)功能架構(gòu)
整個GAP平臺由以下幾部分組成:
n 基礎(chǔ)框架,提供各種基礎(chǔ)服務(wù),包括主框架,通用列表控件和性能監(jiān)控等
n 統(tǒng)一的集成開發(fā)環(huán)境GAP IDE,在提供標(biāo)準(zhǔn)IDE開發(fā)調(diào)試功能的基礎(chǔ)上,又開發(fā)和集成了大量快速的開發(fā)和部署插件,以滿足業(yè)務(wù)開發(fā)人員的使用
n 應(yīng)用系統(tǒng),包括工作流平臺,組織權(quán)限系統(tǒng),接口服務(wù)平臺,消息平臺和數(shù)據(jù)字典
n 組件庫,包括業(yè)務(wù)日志,規(guī)則引擎,WEB控件,全文檢索引擎,任務(wù)調(diào)度,報表工具,站內(nèi)短信,論壇等
在整個平臺的開發(fā)過程中,我們使用了大量紛繁復(fù)雜的技術(shù),進行了持續(xù)的自主研發(fā),不斷創(chuàng)新與完善,同時基于不重新發(fā)明輪子的原則,選用了部分優(yōu)秀的開源項目進行集成和二次開發(fā)。整個平臺的技術(shù)體系,敏捷的開發(fā)過程和技術(shù)創(chuàng)新,都保證了平臺的先進性和創(chuàng)新性,同時保證了瑞友科技的技術(shù)先進性和業(yè)務(wù)敏捷性。
3 技術(shù)創(chuàng)新
在長達六年的平臺建設(shè)過程中,我們進行了大量的技術(shù)創(chuàng)新,來保證平臺的敏捷性和先進性,一下簡要介紹幾個主要的技術(shù)創(chuàng)新點。
3.1 面向業(yè)務(wù)服務(wù)的開發(fā)
3.1.1 什么是業(yè)務(wù)服務(wù)
SOA是一套成熟的方法論和架構(gòu)體系,隨著相關(guān)技術(shù)體系和標(biāo)準(zhǔn)的成熟,OSOA組織在2007年3月發(fā)布了SCA 1.0(服務(wù)組件架構(gòu)) 和SDO 2.1(服務(wù)數(shù)據(jù)對象),同時市場上的ESB(企業(yè)服務(wù)總線)產(chǎn)品逐漸成熟,這標(biāo)志著無論是在方法論還是技術(shù)實現(xiàn)方面,SOA已經(jīng)成為企業(yè)新一代首選的、先進的、成熟的、標(biāo)準(zhǔn)的應(yīng)用架構(gòu)。
SOA是一個完整的軟件軟件架構(gòu)體系,包括運行環(huán)境、編程模型、技術(shù)標(biāo)準(zhǔn)、策略及其方法論,其核心思想是服務(wù),并涵蓋服務(wù)的整個生命周期:建模、開發(fā)、裝配、運行、管理。基于對SOA體系的理解,我們認為SOA的核心理念是業(yè)務(wù)驅(qū)動,其目標(biāo)是為了滿足隨需應(yīng)變的業(yè)務(wù)需求,所以我們在GAP平臺的體系架構(gòu)中創(chuàng)新性提出了業(yè)務(wù)服務(wù)(Business Service)的概念。
每個業(yè)務(wù)服務(wù)表示一個完整的業(yè)務(wù)單元,多個業(yè)務(wù)服務(wù)組成一個完整的業(yè)務(wù)模塊,多個業(yè)務(wù)模塊組成一個子系統(tǒng),多個子系統(tǒng)組成一個完成的項目或產(chǎn)品。例如針對訂單的管理,其業(yè)務(wù)邏輯是由業(yè)務(wù)服務(wù)OrderService及其相關(guān)的領(lǐng)域?qū)ο髮崿F(xiàn),OrderService構(gòu)建完成之后,由于其基本覆蓋了訂單相關(guān)的所有業(yè)務(wù)邏輯,是一個相對獨立的業(yè)務(wù)單元,所以它可以被多個業(yè)務(wù)模塊復(fù)用,甚至可以被系統(tǒng)外部的環(huán)境訪問,整個系統(tǒng)都是有這樣的Business Service,其復(fù)用率和擴展性將大大增強。
從語義上來看,我們提出的業(yè)務(wù)服務(wù)并不特指某一種技術(shù)或標(biāo)準(zhǔn),比如Web Service。在不同的軟件環(huán)境中,業(yè)務(wù)服務(wù)的具體表現(xiàn)形式可以進行動態(tài)轉(zhuǎn)換。例如在容器內(nèi)部,每個BS將以Service Bean的形式為上層環(huán)境提供服務(wù),屬于直接調(diào)用,而在容器外部(異構(gòu)環(huán)境或同構(gòu)環(huán)境不同應(yīng)用系統(tǒng)),BS又會根據(jù)具體的業(yè)務(wù)需求表現(xiàn)為Web Service,RMI,HttpInvoke等,與其他系統(tǒng)進行遠程交互。
3.1.2 面向業(yè)務(wù)服務(wù)的開發(fā)
基于Business Service的技術(shù)架構(gòu)圖如下
(圖三)基于Business Service的技術(shù)架構(gòu)圖一
從上圖可以看出,GAP平臺技術(shù)體系的核心是Business Service,我們完全面向業(yè)務(wù)服務(wù)編程,所有的業(yè)務(wù)服務(wù)以IOC的方式注入到系統(tǒng)中,系統(tǒng)的業(yè)務(wù)邏輯,事務(wù),領(lǐng)域模型,數(shù)據(jù)倉庫都由業(yè)務(wù)服務(wù)單元處理,各個業(yè)務(wù)單元通過組合,可以形成一個業(yè)務(wù)組件(Component)為上層體系提供服務(wù)。
由于整個系統(tǒng)是基于業(yè)務(wù)服務(wù)構(gòu)建的,我們可以很容易基于業(yè)務(wù)服務(wù)提供多種類型的訪問方式,包括最普通的本地調(diào)用,為異構(gòu)系統(tǒng)提供基于SOAP和WSDL的Web Service訪問,為富客戶端提供RMI遠程調(diào)用,同時還提供一些輕量級的遠程訪問方式,例如HttpInvoker和hessian、burlap等分布式遠程訪問等,可以支撐各種異構(gòu)系統(tǒng)的集成和數(shù)據(jù)交換。
業(yè)務(wù)服務(wù)管理模塊可以為內(nèi)外部系統(tǒng)提供服務(wù)注冊功能,把基礎(chǔ)框架,各應(yīng)用系統(tǒng)和組件庫中的組件提供的各種業(yè)務(wù)功能注冊為一個服務(wù),具體的技術(shù)實現(xiàn)包括Web Service,RMI,MQ等,同時提供服務(wù)的訂閱、發(fā)布和監(jiān)控機制,還可以引入其他系統(tǒng)的標(biāo)準(zhǔn)Web Service。通過對業(yè)務(wù)服務(wù)的管理,可以使GAP平臺在構(gòu)建業(yè)務(wù)應(yīng)用時變得更靈活且能夠更快的響應(yīng)不斷變化的業(yè)務(wù)需求和業(yè)務(wù)整合,針對異構(gòu)系統(tǒng)的整合和交互,變得透明而簡單。
同時業(yè)務(wù)服務(wù)還可以注冊到工作流系統(tǒng)中,通過業(yè)務(wù)表單的形式為企業(yè)流程管理提供服務(wù)。
GAP平臺的技術(shù)體系和基于業(yè)務(wù)服務(wù)的設(shè)計思想,可以在下圖中完整的體現(xiàn)出來:
(圖四)基于Business Service的技術(shù)架構(gòu)圖二
3.2 領(lǐng)域驅(qū)動設(shè)計
3.2.1 領(lǐng)域驅(qū)動設(shè)計簡介
2004年著名建模專家Eric Evans發(fā)表了他最具影響力的著名書籍:《Domain-Driven Design –Tackling Complexity in the Heart of Software》(中文譯名:領(lǐng)域驅(qū)動設(shè)計—軟件核心復(fù)雜性應(yīng)對之道),書中提出了“領(lǐng)域驅(qū)動設(shè)計(簡稱DDD)”的概念。
領(lǐng)域驅(qū)動設(shè)計事實上針對是OOAD的一個擴展和延伸,DDD基于面向?qū)ο蠓治雠c設(shè)計技術(shù),對技術(shù)框架進行了分層規(guī)劃,同時對每個類進行了策略和類型的劃分。領(lǐng)域模型是領(lǐng)域驅(qū)動的核心思想,采用DDD的設(shè)計思想,業(yè)務(wù)邏輯不再集中在幾個大型的類上,而是由大量相對小心的領(lǐng)域?qū)ο螅悾┙M成,這些類具備自己的狀態(tài)和行為,每個類是相對完整的獨立體,領(lǐng)域模型就是由這樣許多的細粒度的類組成。基于領(lǐng)域驅(qū)動的設(shè)計,保證了系統(tǒng)的可維護性、擴展性和敏捷性,在處理復(fù)雜業(yè)務(wù)邏輯方面有著先天的優(yōu)勢。
領(lǐng)域驅(qū)動設(shè)計分層結(jié)構(gòu)如下:
(圖五)DDD分層架構(gòu)
(表一)DDD各層含義
|
用戶界面/展現(xiàn)層 |
負責(zé)向用戶展現(xiàn)信息以及解釋用戶命令。 |
|
應(yīng)用層 |
很薄的一層,用來協(xié)調(diào)應(yīng)用的活動。它不包含業(yè)務(wù)邏輯。它不保留業(yè)務(wù)對象的狀態(tài),但它保有應(yīng)用任務(wù)的進度狀態(tài)。 |
|
領(lǐng)域?qū)?/span> |
本層包含關(guān)于領(lǐng)域的信息。這是業(yè)務(wù)軟件的核心所在。在這里保留業(yè)務(wù)對象的狀態(tài),對業(yè)務(wù)對象和它們狀態(tài)的持久化被委托給了基礎(chǔ)設(shè)施層。 |
|
基礎(chǔ)設(shè)施層 |
本層作為其他層的支撐庫存在。它提供了層間的通信,實現(xiàn)對業(yè)務(wù)對象的持久化,包含對用戶界面層的支撐庫等作用。 |
領(lǐng)域模型的基本要素包括:實體、值對象、工廠、倉庫、服務(wù),如下圖所示
(圖六)DDD要素和模式關(guān)系
3.2.2 基于DDD的創(chuàng)新
我們基于DDD的創(chuàng)新點主要有兩個:
第一,我們在GAP平臺的開發(fā)過程中,結(jié)合我們的產(chǎn)品特點,針對領(lǐng)域驅(qū)動的四層模型進行了細分,形成了GAP平臺自己獨有的分層架構(gòu)模型。
如下圖所示:
(圖七)GAP平臺分層架構(gòu)模型
View:展示層,由于GAP平臺主要面向B/S架構(gòu),展示層主要由web資源文件組成,包括JSP,JS和大量的界面控件,采用了AJAX技術(shù),負責(zé)向用戶展現(xiàn)豐富的界面信息,并執(zhí)行用戶的命令
Control:控制層,負責(zé)展示層請求的轉(zhuǎn)發(fā)、調(diào)度和驗證,同時處理后臺返回的異常信息,同時控制層可以通過Action做遠程的請求
Domain:領(lǐng)域?qū)樱窍到y(tǒng)最為豐富的一層,主要負責(zé)處理整個系統(tǒng)的業(yè)務(wù)邏輯。這一層主要包括上一章提到業(yè)務(wù)服務(wù)和領(lǐng)域模型,同時負責(zé)系統(tǒng)的事務(wù)管理
Persistence:持久化層,主要負責(zé)數(shù)據(jù)持久化,支持O/R Mapping和JDBC,對數(shù)據(jù)源的訪問提供多種訪問方式。
另外,我們引入了Spring的IOC容器,系統(tǒng)的控制層、領(lǐng)域?qū)雍统志没瘜釉囟加?/span>IOC容器統(tǒng)一管理,實現(xiàn)完全的接口分離和解耦。
第二,在保證DDD核心思想的基礎(chǔ)上,我們對DDD的基本要素進行了擴展,以滿足GAP平臺的實際需求,如下圖所示:
(圖八)GAP平臺領(lǐng)域模型
GAP平臺領(lǐng)域驅(qū)動設(shè)計要素主要分為以下幾種:
業(yè)務(wù)服務(wù):遵循GAP平臺的設(shè)計思想,核心仍然是業(yè)務(wù)服務(wù)(Business Service),一個業(yè)務(wù)服務(wù)可以由一個或多個領(lǐng)域模型(DomainModel),值對象(VO),實體(Entity)和數(shù)據(jù)訪問對象(DAO)組成,去完成一個完成的業(yè)務(wù)邏輯單元。業(yè)務(wù)服務(wù)主要負責(zé)事務(wù)處理和維護各個領(lǐng)域?qū)ο笾g的關(guān)系,同時為上層訪問提供服務(wù)。
領(lǐng)域模型:真正處理業(yè)務(wù)邏輯的類,例如訂單(OrderModel),具備自己的屬性和行為、狀態(tài),可以聚合VO和Entity,持久化數(shù)據(jù)可以委托給Entity,如果沒有聚合Entity,也可以直接被持久化。
實體類:只具備需要持久化的屬性,被領(lǐng)域?qū)ο缶酆希?/span>DAO調(diào)用實現(xiàn)數(shù)據(jù)的持久化。如果業(yè)務(wù)邏輯相對簡單,可以合并到領(lǐng)域模型中。
值對象:不具備唯一標(biāo)識,不進行持久化的對象,一般用來進行參數(shù)傳遞。
數(shù)據(jù)訪問對象:不處理業(yè)務(wù)邏輯,主要負責(zé)領(lǐng)域模型或?qū)嶓w類的持久化。提供多種持久化方式。
那么如何在GAP平臺中實現(xiàn)一個領(lǐng)域模型設(shè)計呢?可以按照如下步驟進行:
1. 確定業(yè)務(wù)服務(wù)(Business Service),根據(jù)業(yè)務(wù)需求和功能模塊劃分,確定業(yè)務(wù)單元,每個Business Service是一個業(yè)務(wù)單元,覆蓋相關(guān)的領(lǐng)域?qū)ο蟆?/span>
2. 定義領(lǐng)域?qū)ο螅?/span>Domain Model,VO,Entity),根據(jù)業(yè)務(wù)單元的業(yè)務(wù)邏輯定義領(lǐng)域?qū)ο螅ㄟ^UML方法和設(shè)計模式描述領(lǐng)域?qū)ο蟆?/span>
3. 定義領(lǐng)域?qū)ο蟮膶傩院完P(guān)聯(lián)關(guān)系,確定領(lǐng)域?qū)ο蟮母鞣N屬性和各個領(lǐng)域?qū)ο笾g的關(guān)聯(lián)關(guān)系
4. 為領(lǐng)域?qū)ο笤黾有袨椋鶕?jù)業(yè)務(wù)需求(系統(tǒng)用例和界面原型等)為領(lǐng)域?qū)ο笤黾有袨椋⒍x哪些方法要被業(yè)務(wù)服務(wù)所用
經(jīng)過多年的平臺建設(shè)和項目應(yīng)用,我們創(chuàng)造了一套適合企業(yè)敏捷構(gòu)建的領(lǐng)域設(shè)計方法,并進行了重要實踐。目前大量項目已經(jīng)采用了這種方法進行企業(yè)應(yīng)用系統(tǒng)構(gòu)建,并取得了成果。事實證明我們在領(lǐng)域驅(qū)動設(shè)計方面取得了重大創(chuàng)新和突破。
3.3 組件裝配技術(shù)
3.3.1 組件技術(shù)
目前業(yè)界言必提服務(wù),組件技術(shù)說的越來越少了,但對于企業(yè)應(yīng)用開發(fā)領(lǐng)域,組件技術(shù)恰恰是非常必要的,是提升復(fù)用率和敏捷構(gòu)建的基礎(chǔ),也是很多應(yīng)用開發(fā)平臺沒有解決好的關(guān)鍵問題。
組件技術(shù)提出的很早,但是業(yè)界對于組件的定義并沒有完全達成一致,通常而言這個術(shù)語表示一個軟件模塊,這個模塊可以獨立地作為應(yīng)用程序的一部分發(fā)布,或者被組裝到更大的組件中去。這樣看來,小到一個動態(tài)鏈接庫,一個COM組件,一個Web Service,大到工作流,組織權(quán)限管理,規(guī)則引擎等,都可以叫組件。
構(gòu)建一個組件并不困難,關(guān)鍵是如何把一些規(guī)模較大的組件進行裝配與合并,形成一個更大的系統(tǒng),這是業(yè)界的難題。造成這個難題的原因是基于瀏覽器的應(yīng)用!軟件發(fā)展到現(xiàn)在,大部分應(yīng)用都是基于internet或intranet的,軟件載體是瀏覽器。這就造成了現(xiàn)代的企業(yè)應(yīng)用軟件具備大量的資源文件,資源文件已經(jīng)成為軟件產(chǎn)品的主體之一,而不僅僅是原來的可編譯二進制文件,例如jar,dll,exe等,這些資源文件包括:jsp文件,腳本文件,properties屬性文件和各種xml配置文件,如何處理和組裝這些資源文件是企業(yè)應(yīng)用開發(fā)平臺不可避免的問題,這也是當(dāng)前的流行技術(shù)SCA和OSGi沒有解決的,SCA和OSGi各自提出了優(yōu)秀的技術(shù)架構(gòu)和模型去解決組件的裝配、解耦以及異構(gòu)系統(tǒng)集成的問題,但是沒有涉及到資源文件的處理。
很多企業(yè)有自己的開發(fā)平臺,也開發(fā)了很多組件,但是當(dāng)項目組需要從組件庫選取組件進行開發(fā)時,發(fā)現(xiàn)必須依賴組件的構(gòu)建文檔,進行手工復(fù)制組件,組件集成,修改各種復(fù)雜的資源文件,合并,最終形成一個項目,再導(dǎo)入IDE環(huán)境進行開發(fā),測試。這樣大大降低了企業(yè)應(yīng)用開發(fā)的敏捷性和生產(chǎn)率,而且依賴手工構(gòu)建,必然導(dǎo)致這樣那樣的錯誤,使組件的復(fù)用率大打折扣。
3.3.2 GAP平臺的組件裝配機制
GAP平臺在開發(fā)的過程中,同樣遇到組件裝配的問題,目前GAP平臺共18個大型組件,組件之間的交互可以通過接口進行分離,但是資源文件的依賴關(guān)系是組件裝配無法回避的問題。由于Web開發(fā)的規(guī)范限制,每個組件都會使用到一些公共文件,包括web.xml,公用的jsp文件,公用的配置文件等,而每個組件由于采用的技術(shù)需要,在這些公用文件中會增加自己的配置信息,這就為組件裝配增加了難度。
為了保證組件開發(fā)的獨立性,我們采用了各個組件獨立開發(fā),然后再統(tǒng)一裝配的原則。基于以上原則,我們采用了如下創(chuàng)新技術(shù)完美實現(xiàn)了組件的構(gòu)建和裝配。
主要實現(xiàn)技術(shù):ANT技術(shù),Xdoclet技術(shù),Eclipse的Plug-in技術(shù)和WTP的facets機制
實現(xiàn)步驟:
1. 各個組件獨立構(gòu)建,編寫自己的ant腳本,提出各組件自己需要的資源文件和二進制文件
2. 各個組件提取自己在公用文件中使用的配置信息,形成獨立的數(shù)據(jù)文件,該數(shù)據(jù)文件只包含自己需要的配置信息。
3. 把公共資源文件做成模板,并在其中設(shè)置其他組件需要的Merge Point,例如
|
<XDtMerge:merge file="workflow-global-js.data"></XDtMerge:merge>
|
該Merge Poing在自動構(gòu)建時由Xdoclet進行解析處理,把該段內(nèi)容替換成workflow-global-js.data文件中的內(nèi)容,完成合并工作。
4. 使用ant技術(shù)編寫TotalBuile腳本,負責(zé)調(diào)用各個組件自己的ant腳本,構(gòu)建完成的GAP插件內(nèi)容
5. 使用Eclipse的Plug-in及其WTP的facets技術(shù)實現(xiàn)GAP平臺項目管理器插件,其主要完成的工作如下:
a) 提供GAP項目創(chuàng)建向?qū)?/span>
b) 增加選擇GAP組件的wizard page,顯示當(dāng)前版本提供的所有組件,用戶可以自定義自己需要的平臺組件
c) 提供配置功能,通過配置文件設(shè)置各個組件ID,名稱,關(guān)聯(lián)和分組關(guān)系,依賴關(guān)系,URL和頁面展示方式等
d) 設(shè)置基本環(huán)境變量,復(fù)制資源文件,設(shè)置項目所需classpath,根據(jù)merge point進行文件的merge
e) 刪除構(gòu)建文件,項目創(chuàng)建完成
(圖九)GAP平臺組件裝配
如上圖所示,通過GAP項目管理器,可以實現(xiàn)對各個組件的完美裝配,項目開發(fā)人員可以根據(jù)客戶的業(yè)務(wù)需求,靈活選擇需要的組件,組件裝配完成之后即形成一個完成的Project框架,導(dǎo)入GAP平臺的開發(fā)工具VenusTools2009,即可進行設(shè)計、開發(fā)、調(diào)試、運行,保證了企業(yè)應(yīng)用系統(tǒng)構(gòu)建的靈活性和擴展性。
4 結(jié)論
面向企業(yè)應(yīng)用的開發(fā)平臺是IT服務(wù)的基礎(chǔ),也是未來的發(fā)展趨勢,瑞友科技在長達6年的時間內(nèi)始終堅持科技創(chuàng)新,自主研發(fā)的路線,到目前為止形成了以軟件平臺技術(shù)為基礎(chǔ)的核心競爭力。基于該平臺,可有效促進外包服務(wù)企業(yè)承接個性化IT服務(wù)項目,降低軟件外包服務(wù)企業(yè)的入門門檻的技術(shù)難度。同時這一研究成果也為進一步實施中國軟件國際化戰(zhàn)略,提升中國軟件在世界范圍內(nèi)的影響,擴大和鞏固國產(chǎn)軟件和中國品牌在國際市場的競爭優(yōu)勢,培育國際化的軟件企業(yè)發(fā)揮應(yīng)有的作用和示范效果。
GAP平臺主要解決的問題是:
1、 企業(yè)應(yīng)用軟件的層次模型
2、 基于組件的開發(fā)與設(shè)計,各組件既能獨立運行,也可組合裝配形成完整應(yīng)用
3、 具有網(wǎng)絡(luò)拓撲結(jié)構(gòu)的跨企業(yè)組織模型,細粒度的權(quán)限控制
4、 具有技術(shù)環(huán)境兼容性的B/S柔性軟件框架
5、 國際化軟件開發(fā)環(huán)境
6、 基于運行時動態(tài)組構(gòu)的計算機輔助應(yīng)用軟件開發(fā)工具
7、 以消息總線、數(shù)據(jù)總線和控制總線為基礎(chǔ)的業(yè)務(wù)流平臺
本文同時還闡述了GAP平臺的三個主要的技術(shù)創(chuàng)新點,如下:
1. 面向業(yè)務(wù)服務(wù)的開發(fā)
2. 基于領(lǐng)域驅(qū)動的設(shè)計
3. 組件裝配技術(shù)
目前GAP平臺的最新版本是3.5,基于GAP平臺的對外合作已經(jīng)全面展開。在現(xiàn)有的平臺基礎(chǔ)上,我們已經(jīng)開始構(gòu)建GAP5.0的開發(fā)內(nèi)容,以期有更多的技術(shù)創(chuàng)新和研發(fā)成果,為中國企業(yè)應(yīng)用領(lǐng)域做出更大的貢獻。
References:
[1] Richardson, Chris. POJOs IN ACTION. 出版社: Oreilly & Associates Inc, 2008. [書籍]
[2] (美)Eric Evans;孫向暉(注釋), 領(lǐng)域驅(qū)動設(shè)計--軟件核心復(fù)雜性應(yīng)對之道(注釋版). 出版社:人民郵電出版社 2007. [書籍]
[3] 王紫瑤;南俊杰;段紫輝;錢海春;陳荻玲;李冬, SOA核心技術(shù)及應(yīng)用. 出版社: 電子工業(yè)出版社
[4] http://www.eclipse.org/articles/Article-BuildingProjectFacets/tutorial.html, Extending WTP Using Project Facets
身邊越來越多的人開始使用Mac,經(jīng)常被問道Mac的使用問題和技術(shù)問題。遂決定,每天發(fā)布一則#Mac技巧#。同時發(fā)布于微博和微信公眾賬號“Mac技巧”,微信號sagacity-mac,有微信賬號的童鞋掃描下圖片或搜索微信號即可

浙公網(wǎng)安備 33010602011771號