国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)構(gòu)建企業(yè)級(jí)Web平臺(tái)的應(yīng)用

2013-09-03 08:53:26黃光芳金義富
實(shí)驗(yàn)室研究與探索 2013年8期
關(guān)鍵詞:結(jié)構(gòu)層訂單架構(gòu)

黃光芳, 金義富

(湛江師范學(xué)院 a.信息與教育技術(shù)中心;b.科技處,廣東湛江524048)

0 引言

現(xiàn)代信息化高速發(fā)展的今天,越來(lái)越多的應(yīng)用系統(tǒng)都被構(gòu)建在Web之上,關(guān)于它的開(kāi)發(fā)也經(jīng)歷了面向過(guò)程、面向?qū)ο?、面向服?wù)架構(gòu)(SOA)等開(kāi)發(fā)過(guò)程,其復(fù)雜性也越來(lái)越高,使用的技術(shù)平臺(tái)有Java、.NET、Ruby等,目前基于Web的多層架構(gòu)體系(如 J2EE、ASP.NET)已經(jīng)成為解決企業(yè)級(jí)應(yīng)用的主要途徑。因此,如何在軟件中更好地處理業(yè)務(wù)邏輯,且高質(zhì)量高效率地完成軟件的開(kāi)發(fā)便成為人們?nèi)找嬷匾暤膯?wèn)題。但是長(zhǎng)期以來(lái),傳統(tǒng)的Web平臺(tái)開(kāi)發(fā)工作趨向于一種以技術(shù)為先導(dǎo)的開(kāi)發(fā)方式,開(kāi)發(fā)的過(guò)程即先從業(yè)務(wù)方面分析企業(yè)需求,然后把需求傳達(dá)給開(kāi)發(fā)團(tuán)隊(duì),開(kāi)發(fā)人員再依據(jù)需求的描述創(chuàng)造出最有可能的設(shè)想進(jìn)行開(kāi)發(fā)[1]。這些軟件開(kāi)發(fā)的指導(dǎo)原則依然是基于數(shù)據(jù)庫(kù)設(shè)計(jì)而非面向?qū)ο笤O(shè)計(jì),即開(kāi)發(fā)人員一開(kāi)始便根據(jù)需求建立數(shù)據(jù)庫(kù)模型,系統(tǒng)中的業(yè)務(wù)對(duì)象被機(jī)械化的數(shù)據(jù)庫(kù)CRUD操作代替,忽略面向?qū)ο蟮拈_(kāi)發(fā)思想,缺少領(lǐng)域模型的開(kāi)發(fā),業(yè)務(wù)邏輯設(shè)計(jì)混亂,不能及時(shí)有效地反映用戶需求,開(kāi)發(fā)的系統(tǒng)缺少通用性和科學(xué)性等。針對(duì)以上開(kāi)發(fā)方法的不足,文中將領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的開(kāi)發(fā)思想融入到業(yè)務(wù)邏輯復(fù)雜的Web平臺(tái)的構(gòu)建中,力求尋找一種更佳的企業(yè)級(jí)Web平臺(tái)的開(kāi)發(fā)方案。

1 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的分層架構(gòu)和優(yōu)勢(shì)

領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(Domain-Driven Design,DDD)是領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)大師Eric Evans在2004年發(fā)表的文獻(xiàn)[1]中提出的軟件開(kāi)發(fā)概念,是一種基于模型驅(qū)動(dòng)開(kāi)發(fā)(MDD)思想的嶄新的開(kāi)發(fā)方式,目的是讓軟件系統(tǒng)在實(shí)現(xiàn)時(shí)準(zhǔn)確的基于對(duì)真實(shí)業(yè)務(wù)過(guò)程的建模并根據(jù)真實(shí)業(yè)務(wù)過(guò)程的調(diào)整而調(diào)整。

1.1 分層架構(gòu)與職責(zé)劃分

領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)很好地遵循了關(guān)注點(diǎn)分離的原則,提出了成熟、清晰的分層架構(gòu),對(duì)領(lǐng)域?qū)ο筮M(jìn)行了明確的策略和職責(zé)劃分,讓領(lǐng)域?qū)ο蠛同F(xiàn)實(shí)世界中的業(yè)務(wù)形成良好的映射關(guān)系,為領(lǐng)域?qū)<遗c開(kāi)發(fā)人員搭建了溝通的橋梁。領(lǐng)域模型分為用戶界面層、應(yīng)用層、領(lǐng)域?qū)雍突A(chǔ)結(jié)構(gòu)層四層,如圖1所示。

圖1 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的分層架構(gòu)

用戶界面層。主要負(fù)責(zé)向用戶呈現(xiàn)信息、接受并解釋用戶命令,并把用戶的請(qǐng)求發(fā)送到應(yīng)用層或領(lǐng)域?qū)印?/p>

應(yīng)用層。定義了系統(tǒng)要完成的工作,不包含業(yè)務(wù)邏輯的實(shí)現(xiàn),只保留任務(wù)的進(jìn)度狀態(tài)。

領(lǐng)域?qū)?。系統(tǒng)的核心,負(fù)責(zé)系統(tǒng)業(yè)務(wù)邏輯的實(shí)現(xiàn)工作,包含領(lǐng)域行為和模型。

基礎(chǔ)結(jié)構(gòu)層。為上層提供通用的技術(shù)能力,持久化業(yè)務(wù)對(duì)象以及實(shí)現(xiàn)應(yīng)用層的管理等。

領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)除了對(duì)系統(tǒng)架構(gòu)進(jìn)行了分層描述外,還對(duì)對(duì)象(Object)做了明確的職責(zé)和策略劃分,劃分的對(duì)象有實(shí)體、值對(duì)象、工廠、倉(cāng)儲(chǔ)、服務(wù)、聚合等。

實(shí)體(Entities)。具備唯一ID,能夠被持久化,具備業(yè)務(wù)邏輯,對(duì)應(yīng)現(xiàn)實(shí)世界業(yè)務(wù)對(duì)象。

值對(duì)象(Value objects)。不具有唯一ID,由對(duì)象的屬性描述,一般為內(nèi)存中的臨時(shí)對(duì)象,可以用來(lái)傳遞參數(shù)或?qū)?shí)體進(jìn)行補(bǔ)充描述。

工廠(Factories)。主要用來(lái)創(chuàng)建實(shí)體,目前架構(gòu)實(shí)踐中一般采用IOC容器來(lái)實(shí)現(xiàn)工廠的功能。

倉(cāng)儲(chǔ)(Repositories)。用來(lái)管理實(shí)體的集合,封裝持久化框架。

服務(wù)(Services)。為上層建筑提供可操作的接口,負(fù)責(zé)對(duì)領(lǐng)域?qū)ο筮M(jìn)行調(diào)度和封裝,同時(shí)可以對(duì)外提供各種形式的服務(wù)。

聚合(Aggregate)。主要將復(fù)雜領(lǐng)域中關(guān)系密切的多個(gè)實(shí)體的合并在一起,以降低領(lǐng)域的復(fù)雜性。聚合內(nèi)實(shí)體可以相互引用,兩個(gè)聚合之間的實(shí)體必須通過(guò)聚合根才能引用。

1.2 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)開(kāi)發(fā)優(yōu)勢(shì)

領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的專注點(diǎn)在于領(lǐng)域模型的研究,因?yàn)樵陬I(lǐng)域驅(qū)動(dòng)設(shè)計(jì)中,它是以模型驅(qū)動(dòng)設(shè)計(jì)為根基,以軟件領(lǐng)域?yàn)橹埸c(diǎn),專注于領(lǐng)域模型的構(gòu)建與代碼匹配,并將模型作為領(lǐng)域?qū)<液蛙浖_(kāi)發(fā)人員交流的一種開(kāi)發(fā)方式[3]。相對(duì)于以往的數(shù)據(jù)庫(kù)驅(qū)動(dòng)的設(shè)計(jì)方式,這種新開(kāi)發(fā)方式具有以下優(yōu)勢(shì):

(1)復(fù)用。在領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)中,領(lǐng)域?qū)ο笫呛诵?,每個(gè)領(lǐng)域?qū)ο蠖际且粋€(gè)相對(duì)完整的內(nèi)聚的業(yè)務(wù)對(duì)象描述,所以可以形成直接的復(fù)用。同時(shí)設(shè)計(jì)過(guò)程是基于領(lǐng)域?qū)ο蠖皇腔跀?shù)據(jù)庫(kù)的Schema,所以整個(gè)設(shè)計(jì)也是可以復(fù)用。

(2)注重實(shí)踐。專注于具體場(chǎng)景的應(yīng)用,領(lǐng)域?qū)<?、開(kāi)發(fā)人員及用戶使用模型元素之間的交互來(lái)理清系統(tǒng)中的業(yè)務(wù)邏輯,且按模型允許方式將各種概念結(jié)合在一起,然后將這些應(yīng)用到圖和代碼中,消除了開(kāi)發(fā)中思想的隔膜,保證領(lǐng)域模型與系統(tǒng)業(yè)務(wù)相對(duì)應(yīng)。

(3)重構(gòu)。領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)采用面對(duì)對(duì)象的設(shè)計(jì),使領(lǐng)域模型在設(shè)計(jì)中隨時(shí)響應(yīng)用戶提出新的軟件需求,根據(jù)業(yè)務(wù)邏輯向更深層次重構(gòu)。

2 Web平臺(tái)的領(lǐng)域模型設(shè)計(jì)

這里以一個(gè)業(yè)務(wù)邏輯稍為簡(jiǎn)單的網(wǎng)上書店的電子商務(wù)平臺(tái)來(lái)闡述領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)在Web平臺(tái)中應(yīng)用情況。該系統(tǒng)實(shí)現(xiàn)網(wǎng)上書店的常用功能:包括瀏覽書籍、挑選書籍、提交訂單、查看訂單、自動(dòng)折扣、處理訂單、取消訂單等。未登錄用戶可以瀏覽和挑選書籍;已登錄用戶可以提交和查看自己相關(guān)的訂單;管理員可以處理訂單。結(jié)合書店的業(yè)務(wù)場(chǎng)景,抽象出以下一些領(lǐng)域?qū)ο?,如訂單、賬戶、書籍、購(gòu)物車、購(gòu)物項(xiàng)、折扣等,現(xiàn)實(shí)業(yè)務(wù)和領(lǐng)域?qū)ο蟮膶?duì)應(yīng)關(guān)系為:訂單—Order,賬戶—Account,書籍—Book,購(gòu)物車—Cart,購(gòu)物項(xiàng)—Item,折扣—Discount。通過(guò)對(duì)場(chǎng)景及業(yè)務(wù)邏輯的分析和設(shè)計(jì),得到的領(lǐng)域模型如圖2所示。

圖2 網(wǎng)上書店業(yè)務(wù)邏輯圖

在圖2中,首先BookStoreAction負(fù)責(zé)處理表示層的請(qǐng)求,并把請(qǐng)求轉(zhuǎn)發(fā)給業(yè)務(wù)服務(wù)IBookStoreBS,業(yè)務(wù)服務(wù)負(fù)責(zé)調(diào)度上圖中顯示的領(lǐng)域?qū)ο?,處理該?chǎng)景的所有業(yè)務(wù)。從圖中我們還可以清晰地看到各個(gè)領(lǐng)域?qū)ο笾g的關(guān)系。Order和Cart都聚合了Item,都是聚合根,對(duì)應(yīng)都是1…n,Item聚合了Book,Item是一個(gè)聚合根,Book是一個(gè)實(shí)體,對(duì)應(yīng)關(guān)系1…n,Order分別與折扣、賬戶發(fā)生關(guān)聯(lián)和調(diào)用等,整個(gè)網(wǎng)上書店的場(chǎng)景就這樣描述出來(lái)了。

與事務(wù)腳本的編程模式不同,領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)不是把業(yè)務(wù)邏輯放在業(yè)務(wù)服務(wù)(Business Service)層中,而是由具備屬性、行為和狀態(tài)的領(lǐng)域?qū)ο筇幚?。例如Order類,如果是貧血的POJO,那它內(nèi)部只有與數(shù)據(jù)表字段對(duì)應(yīng)的屬性以及getter和setter方法,而在領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)中,則是一個(gè)相對(duì)獨(dú)立的、能夠處理自身關(guān)聯(lián)業(yè)務(wù)的領(lǐng)域?qū)ο?。如在本系統(tǒng)中,訂單類中除了聯(lián)系方式、郵寄地址等基本屬性外,還有以下領(lǐng)域相關(guān)的行為:

(1)init(·),結(jié)算時(shí)調(diào)用方法,根據(jù)當(dāng)前用戶與購(gòu)物車中的Items初始化訂單,供用戶修改。

(2)submit(·),提交訂單時(shí)調(diào)用的方法,保存訂單。

(3)cancel(·),取消訂單,把訂單和相關(guān)item的狀態(tài)設(shè)置為“已取消”,然后委托基礎(chǔ)結(jié)構(gòu)層進(jìn)行持久化。

(4)dispose(·),處理訂單,首先更新訂單項(xiàng)的狀態(tài),然后委托基礎(chǔ)結(jié)構(gòu)層持久化訂單數(shù)據(jù)。

……

通過(guò)以上的描述,我們可以看到,Order類基本上覆蓋了現(xiàn)實(shí)世界中訂單這個(gè)業(yè)務(wù)的所有行為和狀態(tài),是相對(duì)內(nèi)聚的,這樣的特性使其復(fù)用性大大增加,即使未來(lái)開(kāi)發(fā)新的模塊,涉及到訂單業(yè)務(wù)的,可以直接復(fù)用Order類,同時(shí)在后期維護(hù)中,如果想了解訂單的業(yè)務(wù),直接讀Order的代碼就可以了。

3 基于領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的Web平臺(tái)的實(shí)現(xiàn)

在項(xiàng)目開(kāi)發(fā)中,良好的框架設(shè)計(jì)可以有效地提高工作效率,縮短開(kāi)發(fā)時(shí)間、降低開(kāi)發(fā)成本,增強(qiáng)程序的可維護(hù)性和可擴(kuò)展性。根據(jù)領(lǐng)域模型的特點(diǎn),在具體的項(xiàng)目開(kāi)發(fā)中,運(yùn)用分層架構(gòu)和.NET提供的實(shí)體框架[4],對(duì)一些相關(guān)的類和框架進(jìn)行抽象設(shè)計(jì),設(shè)計(jì)了一些通用模塊,如層超類、接口、倉(cāng)儲(chǔ)框架、倉(cāng)儲(chǔ)工廠、倉(cāng)儲(chǔ)基類和工作單元等,為將來(lái)構(gòu)建一個(gè)大型的網(wǎng)上書店的設(shè)計(jì)與實(shí)現(xiàn)打下基礎(chǔ),而且,項(xiàng)目的一些通用模塊與具體的實(shí)現(xiàn)細(xì)節(jié)無(wú)關(guān),即可以直接應(yīng)用到其他系統(tǒng)的設(shè)計(jì)中,提高開(kāi)發(fā)效率。

3.1 層超類[5]設(shè)計(jì)

當(dāng)某一層中所有的對(duì)象都具有某些方法,同時(shí)為了避免這些方法在系統(tǒng)內(nèi)被多次復(fù)制而產(chǎn)生冗余時(shí),便將這些行為移到一個(gè)通用的類中,這個(gè)類就是層超類型(Layer Supertype),然后其他接口都被重構(gòu)[6]到這一超類中。在網(wǎng)上書店的系統(tǒng)框架中,設(shè)計(jì)一個(gè)EntityBase的抽象類作為基礎(chǔ)結(jié)構(gòu)層的層超類型,領(lǐng)域模型中的所有實(shí)體類都繼承它的標(biāo)識(shí)Key。

層超類的分別包含一個(gè)缺省的構(gòu)造器和一個(gè)重載構(gòu)造器,重載構(gòu)造器允許傳入一個(gè)只讀屬性的Key,考慮到不同的實(shí)體標(biāo)識(shí)類型不一致,所以這里的Key的類型是System.Object,體現(xiàn)了超類設(shè)計(jì)的靈活性。

3.2 倉(cāng)儲(chǔ)框架設(shè)計(jì)

倉(cāng)儲(chǔ)是領(lǐng)域?qū)优c基礎(chǔ)結(jié)構(gòu)層的一個(gè)銜接組件,領(lǐng)域?qū)油ㄟ^(guò)倉(cāng)儲(chǔ)訪問(wèn)外部存儲(chǔ)機(jī)制,這樣就使得領(lǐng)域?qū)訜o(wú)需關(guān)心任何技術(shù)架構(gòu)上的實(shí)現(xiàn)細(xì)節(jié)。因此,倉(cāng)儲(chǔ)這個(gè)角色的職責(zé)不僅僅是讀取、保存、查詢、刪除,它還解耦了領(lǐng)域?qū)优c基礎(chǔ)結(jié)構(gòu)層,將繁雜的數(shù)據(jù)庫(kù)操作從領(lǐng)域?qū)又薪夥懦鰜?lái),使開(kāi)發(fā)人員更好地專注于領(lǐng)域?qū)拥脑O(shè)計(jì)。在實(shí)踐中,可以使用依賴注入[7]的方式,將倉(cāng)儲(chǔ)實(shí)例注入到領(lǐng)域?qū)樱瑥亩@得靈活的體系結(jié)構(gòu),如圖3所示。

在本系統(tǒng)中,IRepository(倉(cāng)儲(chǔ)接口)是一個(gè)泛型接 口[8],泛 型 類 型 被 where 子 句 限 定 為EntityFramework中的EntityBase,該接口使用泛型,方便被其他特定的聚合類型的倉(cāng)儲(chǔ)繼承后使用,定義方式見(jiàn)如下代碼所示:

為了消除大量重復(fù)的代碼,倉(cāng)儲(chǔ)框架將在倉(cāng)儲(chǔ)接口的基礎(chǔ)上添加了抽象的倉(cāng)儲(chǔ)基類RepositoryBase,該基類實(shí)現(xiàn)了IRepository<T>,從而方便系統(tǒng)中具體倉(cāng)儲(chǔ)類的重構(gòu)。SqlRepositoryBase<T>基類實(shí)現(xiàn)了RepositoryBase<T>類,是專門針對(duì)SQL Server數(shù)據(jù)庫(kù)讀取和寫入數(shù)據(jù)的通用的基類,它可以減少大量具體倉(cāng)儲(chǔ)中的重復(fù)代碼。具體如圖4所示。

圖3 基礎(chǔ)結(jié)構(gòu)層將倉(cāng)儲(chǔ)實(shí)現(xiàn)注入領(lǐng)域?qū)?/p>

圖4 倉(cāng)儲(chǔ)框架的構(gòu)建模式

在具體業(yè)務(wù)的實(shí)現(xiàn)中,倉(cāng)儲(chǔ)作為領(lǐng)域模型的一部分,領(lǐng)域模型依賴于倉(cāng)儲(chǔ)的抽象,倉(cāng)儲(chǔ)提供一套方法將聚合從持久層中提取出來(lái),包括一系列的查詢,保存根的方法,以及從根開(kāi)始訪問(wèn)聚合內(nèi)其他領(lǐng)域模型的方法。如在Order(訂單)聚合根中,具體實(shí)現(xiàn)倉(cāng)儲(chǔ)為Order,該倉(cāng)儲(chǔ)繼承了 IOrder接口和 SqlRepositoryBase抽象類,SqlRepositoryBase繼承了倉(cāng)儲(chǔ)框架中的RepositoryBase類。為了方便倉(cāng)儲(chǔ)類重構(gòu),系統(tǒng)在初始的框架RepositoryBase基類中添加了一些常用的方法如 Add、Edit、Delete、FindBy、FindAll 等,然 在SqlRepositoryBase基類中覆蓋該方法,于是在具體的倉(cāng)儲(chǔ)實(shí)現(xiàn)類Order中便可以直接調(diào)用這些方法而不需要再次實(shí)現(xiàn),當(dāng)然,如果實(shí)現(xiàn)的功能稍有差導(dǎo),也可以重寫該方法。同理,其他實(shí)現(xiàn)類如Account(賬戶),Book(書籍),Cart(購(gòu)物車)都可以像Order類那樣創(chuàng)建倉(cāng)儲(chǔ)并繼承倉(cāng)儲(chǔ)基類和層超類,這樣整個(gè)系統(tǒng)便提高了代碼利用率,同時(shí)也方便系統(tǒng)向更深層次模型重構(gòu),以獲取更合理的實(shí)現(xiàn)方式,確保系統(tǒng)在開(kāi)發(fā)中有更好的可維護(hù)性和可擴(kuò)展性。

3.3 倉(cāng)儲(chǔ)工廠

工廠模式[9](Factory)實(shí)際就是在處理復(fù)雜的對(duì)象創(chuàng)建時(shí),將對(duì)象創(chuàng)建的職責(zé)交給第三方來(lái)完成,從而降低對(duì)象創(chuàng)建的復(fù)雜度,增加系統(tǒng)的可靠性。這里本系統(tǒng)使用分離接口模式(Separated Interface)創(chuàng)建倉(cāng)儲(chǔ)工廠實(shí)例。在基礎(chǔ)結(jié)構(gòu)層中共設(shè)計(jì)了四個(gè)配置類來(lái)創(chuàng)建倉(cāng)儲(chǔ)的映射。通過(guò)讀取配置節(jié)設(shè)置,并復(fù)制到一個(gè)良好的對(duì)象模型中,倉(cāng)儲(chǔ)工廠類便可以利用這個(gè)對(duì)象模型創(chuàng)建倉(cāng)儲(chǔ)。工廠類首先使用反射[10]來(lái)取得接口類型的名稱,然后查找基于映射配置中的將要?jiǎng)?chuàng)建的倉(cāng)儲(chǔ)類型,如沒(méi)有,則使用Activator對(duì)象的反射能力創(chuàng)建一個(gè)正確的倉(cāng)儲(chǔ)工廠實(shí)例,并將其放到靜態(tài)詞典中以供下次檢索,從而避免系統(tǒng)頻繁構(gòu)建倉(cāng)儲(chǔ),節(jié)省系統(tǒng)開(kāi)銷。

3.4 工作單元(UoW)設(shè)計(jì)

Unit of Work(UoW)模式在企業(yè)應(yīng)用架構(gòu)中被廣泛使用,它能夠?qū)㈩I(lǐng)域模型中對(duì)象狀態(tài)的變化收集起來(lái),并在適當(dāng)?shù)臅r(shí)候在同一數(shù)據(jù)庫(kù)連接和事務(wù)處理上下文中一次性將對(duì)象的變更提交到數(shù)據(jù)庫(kù)中,減少與數(shù)據(jù)庫(kù)交互次數(shù),提高系統(tǒng)性能[11]。在系統(tǒng)基礎(chǔ)結(jié)構(gòu)層中設(shè)計(jì)了一個(gè)工作單元接口IUoW,用于標(biāo)識(shí)已經(jīng)添加、更改或移除的實(shí)體,UoW類實(shí)現(xiàn)IUoW接口,UoW類分別遍歷所有刪除、添加和更改的注冊(cè)信息,整個(gè)操作被包裝進(jìn)一個(gè)事務(wù),僅調(diào)用接口的Commit方法就可以將所有的更改提交到數(shù)據(jù)庫(kù)中,保證了數(shù)據(jù)的一致性。UoW類引用了IUnitOfWorkRespository接口,這個(gè)接口被倉(cāng)儲(chǔ)中的RepositoryBase基類實(shí)現(xiàn),于是工作單元的實(shí)現(xiàn)便回調(diào)到倉(cāng)儲(chǔ)里實(shí)現(xiàn)。

3.5 應(yīng)用服務(wù)層設(shè)計(jì)

應(yīng)用服務(wù)層位于分層架構(gòu)中的第二層,它不負(fù)責(zé)處理任何業(yè)務(wù)邏輯,主要是協(xié)調(diào)其他層的數(shù)據(jù)傳輸、工廠調(diào)用或?qū)ο蟀l(fā)送等,為業(yè)務(wù)邏輯的正確執(zhí)行提供適當(dāng)?shù)倪\(yùn)行環(huán)境。在應(yīng)用服務(wù)層,采用了微軟的窗口通信基礎(chǔ)[12](Windows Communication Foundation,WCF)技術(shù)為系統(tǒng)的上下層提供數(shù)據(jù)通信。WCF使用SOAP通信機(jī)制[13],保證了系統(tǒng)之間的互操作性,即使是運(yùn)行不同開(kāi)發(fā)語(yǔ)言,也可以跨進(jìn)程、跨機(jī)器甚至于跨平臺(tái)的通信,同時(shí)可以提供高效且安全性的訪問(wèn)。WCF在數(shù)據(jù)傳輸中使用數(shù)據(jù)合約(Data Contract)來(lái)訂定雙方溝通時(shí)的數(shù)據(jù)格式,如涉及到訂單處理的部分,應(yīng)用層僅僅是協(xié)調(diào)倉(cāng)儲(chǔ)操作和事務(wù)處理,業(yè)務(wù)邏輯由Order的倉(cāng)儲(chǔ)方法實(shí)現(xiàn)。對(duì)于部分不屬于單獨(dú)的對(duì)象、不能輕易地合并到某個(gè)實(shí)體和值對(duì)象的操作或者涉及到幾個(gè)場(chǎng)景實(shí)體的業(yè)務(wù)邏輯,這種行為一般放在服務(wù)層,聲明為服務(wù),設(shè)計(jì)好后供表示層直接調(diào)用,簡(jiǎn)化了對(duì)領(lǐng)域模型的設(shè)計(jì),使領(lǐng)域模型更純凈。如在管理員處理訂單這個(gè)場(chǎng)景中,首先需要根據(jù)訂單信息獲取賬戶,根據(jù)賬戶信息確定折扣率,同時(shí)進(jìn)行余額校驗(yàn),如果校驗(yàn)通過(guò),就會(huì)調(diào)用訂單對(duì)象的dispose方法處理訂單,這個(gè)場(chǎng)景會(huì)涉及到 Order、Account、Discount等對(duì)象,這樣的業(yè)務(wù)邏輯,則聲明為一種服務(wù),在應(yīng)用層實(shí)現(xiàn)。

4 結(jié)語(yǔ)

對(duì)于領(lǐng)域驅(qū)動(dòng)設(shè)計(jì),最核心的就是如何解決復(fù)雜業(yè)務(wù)的設(shè)計(jì)問(wèn)題,如何抓住業(yè)務(wù)邏輯的本質(zhì),并轉(zhuǎn)換成業(yè)務(wù)邏輯模型。領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)良好的支撐框架和富有彈性的需求分析過(guò)程,已經(jīng)得到許多企業(yè)的認(rèn)可,并且它不依附于哪一個(gè)特定的平臺(tái),這就為廣大開(kāi)發(fā)者提供更有彈性的開(kāi)發(fā)空間,更有利領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的思想融入各個(gè)領(lǐng)域Web平臺(tái)中,加快這方面的研究和應(yīng)用。目前已經(jīng)有許多開(kāi)發(fā)人員嘗試著應(yīng)用到石油、航海[14]、物流[15]及信息系統(tǒng)等項(xiàng)目中,隨著軟件市場(chǎng)的進(jìn)一步成熟和客戶需求的不斷提高,相信這是一個(gè)切實(shí)可行且具有很好應(yīng)用前景的開(kāi)發(fā)方法。

[1] 宋 波,趙永翼,張 悅,等.一種規(guī)范Web開(kāi)發(fā)框架的研究與實(shí)現(xiàn)[J].微電子學(xué)與計(jì)算機(jī),2007(7):201-208.

[2] Eric Evan.領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)-軟件核心復(fù)雜性應(yīng)對(duì)之道[M].陳大峰,張澤鑫譯.北京:清華大學(xué)出版社,2006.

[3] 嚴(yán)欣品.領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)方法的研究及其應(yīng)用[D].南昌:南昌大學(xué),2010.

[4] 雷 蕾,陸新泉,李 睿,等.應(yīng)用_NET框架命名空間技術(shù)實(shí)現(xiàn)Web測(cè)試自動(dòng)化[J].計(jì)算機(jī)應(yīng)用研究,2010,27(6):.

[5] Tim Macarthy.領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)C#2008實(shí)現(xiàn)[M].UMLChina譯.北京:清華大學(xué)出版社,2010.

[6] 科瑞夫斯蓋.重構(gòu)與模式[M].楊 光,劉基誠(chéng)譯.北京:人民郵電出版社,2006.

[7] 張 浩.利用反向控制原則和依賴注入的可復(fù)用框架設(shè)計(jì)解耦方法[J].計(jì)算機(jī)應(yīng)用,2010,30(12):227-229.

[8] 陳葉旺,余金山.泛型編程與設(shè)計(jì)模式[J].計(jì)算機(jī)科學(xué),2006,33(4):253-257.

[9] 彭世康,周逢權(quán).新的設(shè)計(jì)模式——數(shù)組工廠和數(shù)組原型模式[J].計(jì)算機(jī)應(yīng)用,2012,32(S2):107-112.

[10] 吳東慶,胡小健,楊逢建.反射機(jī)制下類工廠模式的實(shí)現(xiàn)與研究[J].計(jì)算機(jī)應(yīng)用,2006,26(3):705-707.

[11] Martin Fowler.企業(yè)應(yīng)用架構(gòu)模式[M].王懷民,周斌譯.北京:機(jī)械工作出版社,2004.

[12] 劉黎志,吳云韜.應(yīng)用WCF分布式框架實(shí)現(xiàn)移動(dòng)數(shù)據(jù)同步[J].計(jì)算機(jī)應(yīng)用,2011,12(31):3281-3284.

[13] 劉嘉?。赟OA架構(gòu)的ERP與電子商務(wù)系統(tǒng)研究[J].企業(yè)經(jīng)濟(jì),2011(5):88-90.

[14] 張金松.領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)在航務(wù)海事系統(tǒng)中的應(yīng)用研究[D].大連:大連海事大學(xué),2010.

[15] 丁 濤.基于領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的物流平臺(tái)系統(tǒng)實(shí)現(xiàn)[D].成都:電子科技大學(xué),2010.

猜你喜歡
結(jié)構(gòu)層訂單架構(gòu)
基于FPGA的RNN硬件加速架構(gòu)
春節(jié)期間“訂單蔬菜”走俏
新產(chǎn)品訂單紛至沓來(lái)
功能架構(gòu)在電子電氣架構(gòu)開(kāi)發(fā)中的應(yīng)用和實(shí)踐
汽車工程(2021年12期)2021-03-08 02:34:30
道路結(jié)構(gòu)層整體抬高加固方案在S20大修工程中的應(yīng)用和研究
上海公路(2019年2期)2019-10-08 09:05:32
“最確切”的幸福觀感——我們的致富訂單
基于疲勞壽命的高模量材料結(jié)構(gòu)層適用性研究
上海公路(2017年1期)2017-07-21 13:38:33
LSN DCI EVPN VxLAN組網(wǎng)架構(gòu)研究及實(shí)現(xiàn)
防排水結(jié)構(gòu)層對(duì)鐵路基床動(dòng)力響應(yīng)的影響研究
瀝青路面結(jié)構(gòu)層參數(shù)對(duì)路表彎沉盆影響分析
泸溪县| 新泰市| 西乡县| 米脂县| 句容市| 镇坪县| 溧阳市| 水城县| 商洛市| 莫力| 沁源县| 罗源县| 华容县| 玉溪市| 龙陵县| 静宁县| 左云县| 河西区| 伊吾县| 长顺县| 商城县| 饶河县| 黄陵县| 陆河县| 林西县| 嘉义市| 阳谷县| 辽宁省| 克拉玛依市| 英德市| 天镇县| 都江堰市| 晋城| 石狮市| 荣成市| 隆昌县| 邢台县| 阿尔山市| 启东市| 天峻县| 贺兰县|