實(shí)用型系統(tǒng)軟件架構(gòu)簡(jiǎn)易設(shè)計(jì)方案_第1頁
實(shí)用型系統(tǒng)軟件架構(gòu)簡(jiǎn)易設(shè)計(jì)方案_第2頁
實(shí)用型系統(tǒng)軟件架構(gòu)簡(jiǎn)易設(shè)計(jì)方案_第3頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、實(shí)用型系統(tǒng)軟件架構(gòu)地簡(jiǎn)易設(shè)計(jì)與實(shí)現(xiàn)摘 要:文章闡述了簡(jiǎn)易實(shí)用型 web瀏覽企業(yè)應(yīng)用網(wǎng)絡(luò)系統(tǒng)軟件框架模型地創(chuàng)建和層次結(jié)構(gòu),分析了它地主要科技含量,指出了它 地巨大優(yōu)勢(shì)和市場(chǎng)潛力,說明了編程實(shí)現(xiàn)地重要技術(shù)環(huán)節(jié),并列舉 了具體地實(shí)踐應(yīng)用.這種軟件框架建模與實(shí)現(xiàn):高效,簡(jiǎn)便,實(shí)用,易 行.關(guān)鍵詞:領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)ddd;對(duì)象關(guān)系映射orm;控制反轉(zhuǎn)ioc ; 依賴注入di ;面向方面編程aop;工作單元unitofwork ;實(shí)體框架; 窗口通信基礎(chǔ)wcf;窗口展現(xiàn)基礎(chǔ) wpf【abstract the paper expoundsthe creation and layer-structure abou

2、t a simple and practicable n et-system- software-frameworkmodule of web-browser-e nterprise-applicatio n. it an alyzes mainscie nce-tech no logy conten t. it point out thegreat adva ntageand marketpotential. it illustrates important programing links and lists a detailed example. the module feature:

3、high performa nee, practicable, simple and easy to use.【key words domain drive design; object relationalmapping;inv ersi on of con trol; depe ndence injecti on; aspect orie nted program ming; un it of work; en tity framework; wi ndows com muni cati on foun dati on; wi ndows prese ntati on foun dati

4、on一論丈發(fā)表專贏一I中國(guó)學(xué)木劇刊網(wǎng) vwwqka nw日門 g.n兇 0引言一般地web瀏覽器企業(yè)應(yīng)用網(wǎng)絡(luò)軟件系統(tǒng),常常采用業(yè)務(wù)數(shù)據(jù)庫 與b/s(brower/server)三層軟件架構(gòu)地形式,雖然易于軟件設(shè)計(jì)和編程實(shí)現(xiàn),但是維護(hù)和升級(jí)起來十分麻煩,很多時(shí)候不得不重新做 起,更別提系統(tǒng)擴(kuò)展了 .這種體系,概念混淆,術(shù)語混亂,框架與模式 僵化,設(shè)計(jì)與代碼很難理解,sql(structured query Ianguage) 運(yùn)用 繁瑣,編程工作量大,軟件制作效率低下,對(duì)于小中型企業(yè)系統(tǒng)還勉 強(qiáng)湊合,對(duì)于中大型企業(yè)系統(tǒng)就根本行不通了 .現(xiàn)代web瀏覽器企業(yè) 網(wǎng)絡(luò)軟件系統(tǒng)設(shè)計(jì),迫切需要高效、實(shí)用、

5、架構(gòu)簡(jiǎn)單、易于實(shí)現(xiàn)、 編程自動(dòng)化程序高、無關(guān)數(shù)據(jù)庫設(shè)計(jì)地多層次通用性系統(tǒng)軟件體系 可以靈活運(yùn)用“領(lǐng)域驅(qū)動(dòng)設(shè)計(jì) ddd(domain drive design) ”地編程 思想,結(jié)合新出現(xiàn)地現(xiàn)代軟件設(shè)計(jì)工具,達(dá)到這些目地,使項(xiàng)目軟件 設(shè)計(jì)集中到具體地“業(yè)務(wù)行為邏輯實(shí)現(xiàn)”和“前端頁面豐富”方面, 通過軟件自動(dòng)架構(gòu)地方式,保證系統(tǒng)軟件設(shè)計(jì)地極大簡(jiǎn)化高效和運(yùn) 行地最大穩(wěn)定可靠,同時(shí)最低化維護(hù)成本并最強(qiáng)化系統(tǒng)地可擴(kuò)展 性.1總體規(guī)劃設(shè)計(jì)思想根據(jù)領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)地思想,結(jié)合新出現(xiàn)地現(xiàn)代軟件設(shè)計(jì)工具插件 采用分層架構(gòu)地做法,圍繞具體地業(yè)務(wù)邏輯,面向?qū)ο筮M(jìn)行分析與 設(shè)計(jì),可以建立如圖1所示地以業(yè)務(wù)領(lǐng)域?yàn)橹行牡厮膶?/p>

6、基本典型 web瀏覽器企業(yè)應(yīng)用網(wǎng)絡(luò)軟件系統(tǒng)框架模型.四層基本系統(tǒng)軟件層次從上到下依次是:表現(xiàn)層、服務(wù)層、領(lǐng)域 模型層和基礎(chǔ)框架層.表現(xiàn)層主要通過用戶界面向用戶展示必要地?cái)?shù)據(jù)信息,同時(shí)接收用戶地反饋.服務(wù)層提供對(duì)“領(lǐng)域模型層”業(yè)務(wù)地封裝,通過網(wǎng)絡(luò)或接口向表 現(xiàn)層暴露粗粒度地業(yè)務(wù)服務(wù).領(lǐng)域模型層主要是展現(xiàn)業(yè)務(wù)領(lǐng)域地行為邏輯、業(yè)務(wù)處理狀態(tài)以及 實(shí)現(xiàn)業(yè)務(wù)地規(guī)則,同時(shí)也包含了領(lǐng)域?qū)ο蟮貭顟B(tài)信息.該層是整個(gè) 應(yīng)用程序地核心部分,它可以包含地概念和內(nèi)容有:實(shí)體(entities)、“值”對(duì)象(value objects)、領(lǐng)域服務(wù)(domainservices)、倉儲(chǔ)契約 / 接口(repository c

7、ontracts/intefaces) 等.基礎(chǔ)結(jié)構(gòu)層為應(yīng)用程序地?cái)?shù)據(jù)存取提供服務(wù),它可以是應(yīng)用程序 本身地持久化機(jī)制,也可以是外部系統(tǒng)提供數(shù)據(jù)訪問地webservice等它提供了能被其它各層訪問地通用技術(shù)框架,比如異常捕獲與 處理、日志、認(rèn)證、授權(quán)、驗(yàn)證、跟蹤、監(jiān)視、緩存等.這些操作通常會(huì)橫向散布在應(yīng)用程序地各個(gè)層面,面向方面編程aop(aspect orie nted programmi ng)關(guān)注地就是如何在不影響對(duì)象本身處理邏 輯地基礎(chǔ)上來實(shí)現(xiàn)這些橫切地卻又必不可少地功能點(diǎn).實(shí)踐中通過 使用一些流行地?cái)r截(interception)框架(如microsoft unity 、一論丈發(fā)表專

8、贏一I中國(guó)學(xué)木劇刊網(wǎng)nw日門 g.n兇 castle dynamicproxy 等)可以方便地實(shí)現(xiàn) aop.按照領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)地思想,領(lǐng)域模型建立在服務(wù)層中,能夠更好 地應(yīng)對(duì)復(fù)雜與不斷擴(kuò)展地大型企業(yè)軟件應(yīng)用需求,而實(shí)際應(yīng)用中更 多地是繁瑣并不特別復(fù)雜地業(yè)務(wù)領(lǐng)域行為邏輯,把“領(lǐng)域模型”獨(dú) 立一層,即保持了領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)地復(fù)雜應(yīng)對(duì)與業(yè)務(wù)擴(kuò)展地優(yōu)勢(shì),又可以加速軟件體系地運(yùn)行效率.對(duì)于中小企業(yè)應(yīng)用,這四個(gè)層次就 足夠了 ,對(duì)于業(yè)務(wù)領(lǐng)域地拓展和中大企業(yè)地應(yīng)用,還可以把“領(lǐng)域模 型層”展開為若干個(gè)層次,將基本地四層框架擴(kuò)展n層框架.整個(gè)軟 件框架模型,能大能小,適應(yīng)性更強(qiáng)大了 .還可以在基礎(chǔ)結(jié)構(gòu)層采用依賴注入

9、ioc(稱“控制反轉(zhuǎn)”)、工作 單元、緩沖操作等技術(shù),在“領(lǐng)域模型層”所在orm框架中使用實(shí) 體框架(en tity framework)、hibernate 等技術(shù),在服務(wù)層選用窗口 通信基礎(chǔ) wcf(wi ndows com muni cati on foun dati on)、spri ng 等技術(shù),在應(yīng)用層窗口展現(xiàn)基礎(chǔ) wpf(windows presentation foundation) struts ii等技術(shù),規(guī)范編程,實(shí)現(xiàn)軟件地大部分自動(dòng) 架構(gòu),提高軟件地執(zhí)行效率,做到即用數(shù)據(jù)庫又與數(shù)據(jù)庫無關(guān).選用這種web瀏覽器企業(yè)應(yīng)用網(wǎng)絡(luò)系統(tǒng)軟件模型,項(xiàng)目軟件設(shè)計(jì) 就可以集中到具體地“業(yè)

10、務(wù)行為邏輯實(shí)現(xiàn)”和“前端頁面豐富”上 面了.2新軟件體系科技分析2.1框架模型地技術(shù)應(yīng)用一論丈發(fā)表專贏一I中國(guó)學(xué)木劇刊網(wǎng) vwwqka nw日門 g.n兇架構(gòu)地新軟件體系,采用地主要新技術(shù)如下:數(shù)據(jù)庫動(dòng)態(tài)生成技術(shù)和orm框架對(duì)于應(yīng)用,采用新版地entity framework 4.1實(shí)體框架, 進(jìn)行code-first/model-first 編程,實(shí)現(xiàn)數(shù)據(jù)庫從代碼生成,大大 提升開發(fā)階段數(shù)據(jù)庫應(yīng)對(duì)業(yè)務(wù)地變化能力;對(duì)于 j2ee應(yīng)用,可以采 用類似地hiberate技術(shù).同時(shí)采用orm框架,隱藏?cái)?shù)據(jù)訪問地細(xì)節(jié), 使數(shù)據(jù)庫交互變得簡(jiǎn)單易行,并且完全不用考慮具體地sql語句應(yīng) 用,從而實(shí)現(xiàn)快速開發(fā)

11、,避免因sql操作而引發(fā)地各種人為問題.2.1.2 一致地網(wǎng)絡(luò)通信服務(wù)應(yīng)用對(duì)于應(yīng)用,服務(wù)層采用wcf,實(shí)現(xiàn)業(yè)務(wù)功能在網(wǎng)絡(luò)傳輸?shù)?能力,為多客戶端應(yīng)用場(chǎng)合提供統(tǒng)一地服務(wù)接口,避免了重復(fù)開發(fā),使移動(dòng)或固定簡(jiǎn)易終端、個(gè)人計(jì)算機(jī)終端等能夠連網(wǎng)地客戶端都可 以訪問統(tǒng)一地服務(wù)地址,實(shí)現(xiàn)系統(tǒng)服務(wù)地一致性;對(duì)于j2ee應(yīng)用, 可以采用功能強(qiáng)大地spring.面向方面編程aop應(yīng)用對(duì)于應(yīng)用,采用微軟企業(yè)庫地 policyinjection模塊來實(shí)現(xiàn)aop.對(duì)于j2ee 應(yīng)用,采用集成有 aop地spring.aop 禾口 ioc 是 進(jìn)行邏輯分離和降低耦合度最主要地方式.aop技術(shù),剖解封裝地對(duì) 象內(nèi)部,將影響

12、多個(gè)類地公共行為封裝為一個(gè)可重用模塊,并將其 名為“方面(aspect) ” .它把軟件系統(tǒng)分為兩個(gè)部分:核心關(guān)注點(diǎn) 和橫切關(guān)注點(diǎn).業(yè)務(wù)處理地主要流程是核心關(guān)注點(diǎn),與之關(guān)系不大一論丈發(fā)表專贏一1中國(guó)學(xué)AfflW地部分是橫切關(guān)注點(diǎn).橫切關(guān)注點(diǎn),經(jīng)常發(fā)生在核心關(guān)注點(diǎn)地多處, 而各處都基本相似.通過aop技術(shù),實(shí)現(xiàn)了諸如日志、事務(wù)管理、權(quán) 限控制等橫切關(guān)注點(diǎn)地通用邏輯,可以專注于核心關(guān)注點(diǎn),將精力 投入到解決企業(yè)地商業(yè)邏輯上來.同時(shí)這些封裝好了地橫切關(guān)注點(diǎn) 提供地功能可以最大限度地復(fù)用于業(yè)務(wù)邏輯地各個(gè)部分,既不需開發(fā)人員作特殊地編碼,也不因修改橫切關(guān)注點(diǎn)地功能而影響具體地 業(yè)務(wù)功能.依賴注入及其實(shí)現(xiàn)

13、分層架構(gòu)地設(shè)計(jì),層與層之間是松散耦合地,上層不會(huì)具體依賴 于下層,只依賴于它地一個(gè)接口 .這樣,上層不能直接實(shí)例化下層中 地類,而只持有接口;接口所指變量最終究竟是哪個(gè)類,則由依賴注 入機(jī)制決定.對(duì)于應(yīng)用,采用微軟地unity2.0實(shí)現(xiàn)依賴注 入,它包括控制反轉(zhuǎn)ioc、di(dependenee injection) 和攔截技術(shù). 對(duì)于j2ee應(yīng)用,可以采用含有ioc等功能地spring.前端頁面地豐富絢麗為使前端網(wǎng)頁界面豐富絢麗,可以采用通用地js(java script) 、 jquery、ajax、div(division) + css(cascading style sheet)、as

14、(acti on script)-flash等技術(shù)實(shí)現(xiàn)導(dǎo)航、布局、感覺、視覺、動(dòng)畫、立體及其人機(jī)操作地簡(jiǎn)便和快捷.對(duì)于應(yīng)用,還可以采 用功能強(qiáng)大地 ria(rich internet applications)-wpf或silverlight ;對(duì)于j2ee應(yīng)用,還可以采用功能強(qiáng)大地struts ii.一論丈發(fā)表專贏一I中國(guó)學(xué)木劇刊網(wǎng) vwwqka nw日門 g.n兇2.2可能地技術(shù)應(yīng)用與替代數(shù)據(jù)庫訪問部分,采用了 orm框架有更多地選擇:如應(yīng) 用地 nhibernate、simple.data 等,j2ee 應(yīng)用地 ibatis 等;中小型 企業(yè)軟件地開發(fā),應(yīng)用也可以使用傳統(tǒng)地,j2ee 應(yīng)

15、 也可以使用傳統(tǒng)地 jdbc(java data base connectivity).網(wǎng)絡(luò)訪問部分,應(yīng)用,除了采用較多地規(guī)范wcf技術(shù),還可 以根據(jù)系統(tǒng)地規(guī)模采用webservice等其它替代方案;j2ee應(yīng)用也 可以使用傳統(tǒng)地 url(uniform resoure locator) 定位、socket 套 接.可重用模塊部分,如日志、異常及驗(yàn)證等,應(yīng)用,除了采用 “微軟企業(yè)庫”提供地一致功能,也可以為每一模塊采用一些技術(shù) 框架,如Iog4net日志模塊等,甚至自己開發(fā).ioc/aop部分也有較多替代方案,應(yīng)用,除了微軟企業(yè)庫 unity 禾口 policyinjection,也可以使用

16、castle windsor 、autofac等技術(shù).j2ee 應(yīng)用地選項(xiàng)就更多了 .新軟件體系架構(gòu),還有很強(qiáng)地預(yù)留和伸縮空間,可以輕易更換或 加入將來出現(xiàn)地眾多地簡(jiǎn)便自動(dòng)工具軟件,實(shí)現(xiàn)自身地豐富完善和 功能擴(kuò)展.3新軟件體系優(yōu)勢(shì)分析新軟件體系架構(gòu),降低了系統(tǒng)開發(fā)地復(fù)雜度,在設(shè)計(jì)、開發(fā)、測(cè)試、 部署及維護(hù)等各個(gè)環(huán)節(jié)為應(yīng)用系統(tǒng)帶來了高可用性、高延展性等正一論丈發(fā)表專贏一I中國(guó)學(xué)木劇刊網(wǎng) vwwqka nw日門 g.n兇 面效應(yīng),其巨大優(yōu)勢(shì)概括如下:1)提高了系統(tǒng)地可測(cè)試性:多層架構(gòu),層與層之間是低耦合地, 增加了各層地獨(dú)立性,也提高了可測(cè)試性,這樣開發(fā)出來地系統(tǒng)更 加健壯.2)簡(jiǎn)單化了解決方案地

17、維護(hù)和管理:層內(nèi)高內(nèi)聚、層間低耦合 地結(jié)構(gòu),使得系統(tǒng)實(shí)現(xiàn)與分層組織方式變得非常靈活方便,維護(hù)和 管理地直接、高效,顯而易見.3)增加了系統(tǒng)地可移植性:企業(yè)軟件開發(fā)中,許多模塊都是可通 用地,如日志、異常、緩存、驗(yàn)證模塊等.通過分層,很容易分離出 通用模塊,便于迅速應(yīng)用到其它地項(xiàng)目,展現(xiàn)了模板化地組織架構(gòu).4)數(shù)據(jù)庫由編碼自動(dòng)生成:軟件框架采用最新地?cái)?shù)據(jù)庫自動(dòng)操 作技術(shù),并融入orm機(jī)制,實(shí)現(xiàn)了從代碼生成數(shù)據(jù)庫地強(qiáng)大功能,即 使開發(fā)測(cè)試階段地?cái)?shù)據(jù)庫也可以很容易地應(yīng)對(duì)業(yè)務(wù)地變化,大大提 高了開發(fā)效率.5)能夠?qū)Χ喾N類型客戶端提供一致功能服務(wù):具體業(yè)務(wù)應(yīng)用領(lǐng)域中有多種終端,如手持移動(dòng)操控儀、立/掛式

18、操控臺(tái)以及個(gè)人計(jì)算 機(jī)軟件架構(gòu)設(shè)計(jì)中通過網(wǎng)絡(luò)邊界分離服務(wù)層和表現(xiàn)層 ,就可以輕 易地使這些不同類型終端,獲取統(tǒng)一地系統(tǒng)功能服務(wù).6)增強(qiáng)系統(tǒng)地可伸縮性:借助于分層地優(yōu)勢(shì)以及架構(gòu)中各部分設(shè)計(jì)地高內(nèi)聚性,各層自成模塊體系,互相獨(dú)立;增刪各個(gè)獨(dú)立地模 塊,不會(huì)影響到其它模塊或?qū)拥毓δ?,系統(tǒng)地可伸縮性強(qiáng)大.一論丈發(fā)表專贏一I中國(guó)學(xué)木劇刊網(wǎng)vwwqka nw日門 g.n兇7)實(shí)現(xiàn)了編碼自動(dòng)化,避免人為因素影響:軟件框架采用了眾多 地網(wǎng)絡(luò)編程新技術(shù),實(shí)現(xiàn)了數(shù)據(jù)庫訪問地封裝,日志、異常捕獲以及 aop攔截等常用功能,減少了重復(fù)模塊編碼量,同時(shí)也避免了因人為 因素導(dǎo)致地性能問題.可以看到,這種軟件體系框架也存

19、在不足,它需要非常熟悉業(yè)務(wù) 領(lǐng)域.熟悉了具體地業(yè)務(wù)領(lǐng)域,才能正確完整地實(shí)現(xiàn)系統(tǒng)地行為邏 輯,否則,容易偏離軟件架構(gòu)地核心-領(lǐng)域模型,導(dǎo)致項(xiàng)目重構(gòu)甚 至失敗.這種軟件架構(gòu)是為應(yīng)對(duì)復(fù)雜性而提出地,簡(jiǎn)單項(xiàng)目采用傳 統(tǒng)地易于實(shí)現(xiàn)地b/s三層框架就可以了,沒有必要采用這種靈活地 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)地開發(fā)思想.4新軟件體系編程實(shí)現(xiàn)編程實(shí)現(xiàn)這種軟件體系框架,即可以采用j2ee規(guī)范地ec lipse+strutsii+spring+hiberate/ibatis地常用開發(fā)環(huán)境以 java語言完成,也可以選用asp .net架構(gòu)地visualstudio + entityframework / nhiberate地常

20、用開發(fā)環(huán)境以c#語言完成.這里就后面一種常規(guī)開發(fā),以圖書館地圖書管理、讀者借書/還書為業(yè) 務(wù)背景,舉例說明其具體應(yīng)用.4.1開發(fā)環(huán)境地建立與配置2.0/microsofte nterpriselibrary5.0、sqlserver2008 、asp .net需要地最少軟件開發(fā)工具有:.net4.0、visualstudio2010sp1 、 ado .net en tity framework4.1、unitymvc3.visualstudio也可以是低版本,visualstudio2008以上版本 集成有 ado .net en tity framework.數(shù)據(jù)庫也可以是 oracle、

21、mysql等.其它是插件軟件工具.安裝visualstudio及其它插件工具和數(shù)據(jù)庫,對(duì)visualstudio 、 插件工具、數(shù)據(jù)庫做關(guān)聯(lián)配置.4.2軟件框架體系地實(shí)例化打開visualstudio集成開發(fā)環(huán)境,創(chuàng)建新項(xiàng)目libsys,在其解決方案中建立以下子項(xiàng): libsys.desig n本架構(gòu)結(jié)構(gòu).項(xiàng)目地一些設(shè)計(jì)圖稿,包括圖1所示地基 libsys.i ntrastructure 主要是處理數(shù)據(jù)訪問和交叉剪切(cross-cutting)地基礎(chǔ)結(jié)構(gòu)層組件.前者主要包含倉儲(chǔ)與工作單元地具體實(shí)現(xiàn);后者主要包含ioc容器等. libsys.domain包括了項(xiàng)目地領(lǐng)域模型與業(yè)務(wù)邏輯,是系統(tǒng)地

22、核心所在. libsys.repository是倉儲(chǔ)地具體實(shí)現(xiàn)項(xiàng)目,它引用libsys.domain 項(xiàng)目.本項(xiàng)目包含了倉儲(chǔ)實(shí)現(xiàn),同時(shí)也一并實(shí)現(xiàn)了repository tran sacti on con text對(duì)象. libsys.service用于表現(xiàn)層交互.交互采用dto(datatransferring object).dto與 entity/aggregateroot (實(shí)體 / 聚合 根)并非一一對(duì)應(yīng).雖然項(xiàng)目,看上去是一個(gè)entity/aggregateroot對(duì)應(yīng)一個(gè)data object,但深入分析可以發(fā)現(xiàn),這些data objects中 包含地?cái)?shù)據(jù),與對(duì)應(yīng)地entity/

23、aggregateroot中包含地對(duì)象狀態(tài)是有出入地.這是由應(yīng)用程序地需求決定地. libsys.web- web應(yīng)用程序,以 asp. net mvc 框架為基礎(chǔ),提供用戶界面交互接口 .這里以倉儲(chǔ)和應(yīng)用服務(wù)層地實(shí)現(xiàn)為例,具體說明框架體系地實(shí)例 化過程.1)倉儲(chǔ)地實(shí)現(xiàn)倉儲(chǔ)保存領(lǐng)域模型地實(shí)體對(duì)象.業(yè)務(wù)處理需要把正在參與處理過程地對(duì)象保存到倉儲(chǔ)中,或者從倉儲(chǔ)中讀取需要地實(shí)體對(duì)象,或?qū)?對(duì)象直接從倉儲(chǔ)中刪除.依據(jù)ddd理論,對(duì)reader和book分別設(shè)計(jì) 對(duì)應(yīng)地倉儲(chǔ)readerrepository禾口 bookrepository. 而首先需要設(shè)計(jì)地是倉儲(chǔ)基類repositorybase, 它繼

24、承于接口 depository 類,主要 任務(wù)是圭寸裝 en tity framework 中地 database con text, 以統(tǒng)一地方 式獲??;另外還實(shí)現(xiàn)了幾個(gè)抽象方法,如圖2所示,這樣方便了子類 地實(shí)現(xiàn),減少了開發(fā)地重復(fù)代碼編寫.2)應(yīng)用服務(wù)層地實(shí)現(xiàn)應(yīng)用服務(wù)層采用wcf實(shí)現(xiàn).示例系統(tǒng)由libsys.service項(xiàng)為整個(gè)系統(tǒng)提供該服務(wù).libsys.service項(xiàng)位于領(lǐng)域模型層上面、用戶界面層下面,用于用戶界面與領(lǐng)域地交互.它不負(fù)責(zé)處理任何業(yè)務(wù)邏輯,是從更高地層面,為業(yè)務(wù)邏輯地正確執(zhí)行提供適當(dāng)?shù)剡\(yùn)行環(huán)境, 同時(shí)起到任務(wù)協(xié)調(diào)地作用,如事務(wù)處理和基礎(chǔ)結(jié)構(gòu)層服務(wù)調(diào)用.wcfservi

25、ce中“還書”操作地具體實(shí)現(xiàn)如下:public void retur n( stri ng reader name, in tbookid)readerreader = readerrepository.fi nd(specificati on. eval(r = r. n ame.equals(readeruser name);book book = bookrepository.getbykey(bookid);reader.retur n( book);4.3業(yè)務(wù)行為邏輯地簡(jiǎn)易實(shí)現(xiàn)圖書管理地業(yè)務(wù)邏輯簡(jiǎn)化如下:普通用戶可以添加圖書并查看圖書地詳細(xì)信息;注冊(cè)用戶也就是讀者,可以借書、還書、查

26、看借過地圖書列表和 借書信息.實(shí)體與聚合根首先分析實(shí)體,不難看出,讀者和圖書是實(shí)體;每個(gè)讀者都將有自 己地借書信息(如何時(shí)借地哪本書,是否已經(jīng)歸還,或者是否已經(jīng)過 期),與之對(duì)應(yīng)每本書也可以有被借歷史(如,特定書何時(shí)借給哪個(gè) 讀者),因此借書信息也是實(shí)體.再來分析聚合.借書信息是與讀者和圖書關(guān)聯(lián)地,沒有讀者,借書 信息沒有存在地意義,同樣,沒有圖書,借書信息也同樣不存在.每 個(gè)讀者可以沒有任何借書信息(或借書記錄),也可以有多條借書信 息;每本書同樣可以沒有任何被借信息(或被借記錄),也可以有多 條被借記錄.因此存在兩個(gè)聚合:讀者-借書信息聚合(1.0.*)以及圖書-借書信息聚合(1.0.*)

27、.讀者和圖書分別為聚合根,借書信息 為實(shí)體.于是可以得出結(jié)論:讀者:reader,聚合根;圖書:book,聚合根;借書信息:registratio n,實(shí)體.從而可以確定需要針對(duì)讀者(reader)和圖書(book)實(shí)現(xiàn)地倉儲(chǔ) 以及相應(yīng)地規(guī)約.432基于entity framework 建立領(lǐng)域模型目前 entity framework支持三種建模方式: model first 、database first 以及code first.對(duì)于領(lǐng)域驅(qū)動(dòng)設(shè)計(jì),宜采用codefirst.創(chuàng)建entities文件夾,編寫實(shí)體代碼如下:public class reader /*代碼省略*/ public

28、 class book / book聚合根 /*代碼省略*/ 實(shí)體public class registrati on /registrati on /*代碼省略*/ 創(chuàng)建mappings文件夾,編寫o-r映射規(guī)則.讀者實(shí)體映射代碼如下:public class readermap : entitytypeconfiguration publicreadermap() haskey(r =r.id); /主鍵 / propertiesproperty(f = f.id).hasdatabasege neratedoptio n(databasege neratedopti on .ide nt

29、ity);/代碼省略totable( “reader ” ); II 表與字段映射形成地最終關(guān)系模型如圖3.433添加業(yè)務(wù)邏輯根據(jù)ddd,實(shí)體處理業(yè)務(wù)邏輯,應(yīng)該盡量將業(yè)務(wù)體現(xiàn)在實(shí)體上;如 果某些業(yè)務(wù)牽涉到多個(gè)實(shí)體,無法將其歸結(jié)到某個(gè)實(shí)體,則引入領(lǐng) 域服務(wù)(domain service).本案例業(yè)務(wù)不復(fù)雜,不涉及領(lǐng)域服務(wù),業(yè) 務(wù)邏輯都是在實(shí)體上處理地.以“讀者(reader)為例,它有借書和還 書地行為,其行為實(shí)現(xiàn)如下:public class reader借出行為 public void borrow(book book) II if (book.le nt)Pwww .q i ka nwa

30、the book has bee nthrow new inv alidoperati on excepti on( lent. ”);registrati on reg = new registrati on();reg.registrati on status = registrati on status .no rmal;reg.book = book;reg.date = datetime .now;reg.duedate = reg.date.adddays(90); reg.retur ndate = datetime.maxvalue;book.registrati on s.a

31、dd(reg);bookent =true;this.registratio ns.add(reg);public void return(book book) /歸還行為 if(!book.le nt)throw n ewi nv alidoperati on excepti on(“the book has not bee nlent. ”);var q = from r in this.registrati onswherer.book.id.equals(book.id) &r.registrati on status = registratio nstatus. no rmal se

32、lect r;if (q.co un t() 0) varreg = q.first(); if (reg.expired)/ todo:讀者需期滿付費(fèi)reg.retur ndate = datetime .now;reg.registrati on status = registrati on status.returned;bookent = false;elsethrow newinv alidoperati on excepti on( str in g.format(“reader 0 did ntborrow this book. ” ,);4.4應(yīng)用軟件系統(tǒng)地自

33、動(dòng)構(gòu)造建立起了軟件框架體系并實(shí)現(xiàn)了業(yè)務(wù)行為邏輯,就可以自動(dòng)構(gòu)造 應(yīng)用軟件系統(tǒng)了 .這得益于ddd思想與orm、oc、di、aop、unitofwork 觀念及其相應(yīng)插件等軟件工具地采用.自動(dòng)構(gòu)造應(yīng)用軟件系統(tǒng)最大 地體現(xiàn)是從代碼生成數(shù)據(jù)庫,即實(shí)現(xiàn)領(lǐng)域模型與數(shù)據(jù)庫關(guān)系模型地 自動(dòng)創(chuàng)建,步驟如下:1) 在基礎(chǔ)結(jié)構(gòu)層(rastructure) 添加繼承自dbc on text地類libco ntext,關(guān)鍵代碼如下:public class libc on text: dbc on text privateread only static str ing conn ecti on

34、_stri ng =Pwww .q i ka nwa n ame=libsyspublicdbsetreader s get; set; publicdbsetregistrati ons get; set; publicdbsetbooks get; set; 傳入數(shù)public libc on text () : base(c onn ecti on _stri ng) /據(jù)庫連接字符串 /*代碼省略*/ protected override voidonm odelcreat in g(dbmodelbuildermodelbuilder) base. onm odel creati n

35、g(modelbuilder);modelbuilder.c onven tio ns.remove();移除復(fù)數(shù)表名契約modelbuilder.c onven ti on s.remove();modelbuilder.c on figuratio ns.add( new readermap() /添力口 映射配置文件.add( new registratio nm ap().add( new bookmap();2) 建立數(shù)據(jù)庫初始化類,代碼如下:public class libi nitializer: dropcreatedatabaseifmodelcha nges protect

36、ed override void seed(schoolc on text con text) base.seed(co ntext); / 代碼省略3) 在libsys.web 項(xiàng)目地 global.asax 下地 application_ start()中添加如下代碼來實(shí)現(xiàn)系統(tǒng)運(yùn)行時(shí)自動(dòng)數(shù)據(jù)庫創(chuàng)建并初始化:database.seti nitializer( newlibraryi n itializer();通過以上配置,系統(tǒng)在第一次運(yùn)行時(shí)會(huì)根據(jù)映射配置文件地關(guān)系 模型,自動(dòng)創(chuàng)建數(shù)據(jù)庫表及其主鍵、外鍵等約束.以后進(jìn)行了修改, 也會(huì)對(duì)數(shù)據(jù)庫表自動(dòng)進(jìn)行調(diào)整和更新.4.5增加網(wǎng)頁界面地豐富渲染這

37、里采用asp .net mvc框架實(shí)現(xiàn)了基于瀏覽器地用戶界面.用戶 界面層通過wcf services與系統(tǒng)交互.不同于傳統(tǒng)地軟件開發(fā),不將domain model帶到用戶界面層,使其中地實(shí)體作用于 mvc中地 m(presentation model). 只將 mvc中地 m用于界面數(shù)據(jù)綁定 .asp .net mvc3 使用 un ity.mvc3 輕松實(shí)現(xiàn) ioc.ioc 框架 un ity 地 引入實(shí)現(xiàn)了面向接口編程.首先安裝nuget,通過nuget在線搜索 unity.mvc3并安裝,該項(xiàng)目自動(dòng)添加了 bootstrapper.cs 文件,在該 文件中定義un ityc on ta

38、i ner,最后在global.asax 文件中初始化bootstrapper 即可實(shí)現(xiàn) ioc.bootstrapper文件中關(guān)鍵代碼代碼:public static void in itialise()var container = build uni tyc ontain er();depe nden cyresolver.setresolver( new uni tydepe nden cyresolPwww .q i ka nwa ver(c ontain er);private static iun itycon tai nerbuildu ni tyco ntai ner() v

39、ar container = new un ityco nta in er().registertype (newhierarchicallifetimema nager().registertype().registertype()/代碼省略.registertype, reader repository。;contain er.registerc on trollers();retur n contain er;global.asax 文件關(guān)鍵代碼只有一句:protected void applicatio n_start()/代碼省略bootstrapper.i nitialise();從上述架構(gòu),可以看出,用戶界面可以不局限于 web應(yīng)用程序,還 可以是winform應(yīng)用程序,或者pda,手機(jī)應(yīng)用程序等,從而實(shí)現(xiàn)了界 面與領(lǐng)域核心功能開發(fā)地分離.實(shí)現(xiàn)了基本地用戶網(wǎng)頁界面,就可以在此基礎(chǔ)上,采用通用地js、jquery、ajax、div+css、as-flash 等技術(shù)實(shí)現(xiàn)導(dǎo)航、布局、感覺、視覺、動(dòng)畫、立體及其人機(jī)操作地簡(jiǎn)便和快捷了 ,從而使前端網(wǎng)頁界面豐富絢麗限于篇幅,這里不再詳細(xì)舉例5結(jié)束語簡(jiǎn)易實(shí)用型web

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論