软件构造的步骤
?
軟件構(gòu)造從用戶需求開(kāi)始
需求即用戶對(duì)軟件功能的描述,用戶通過(guò)需求告訴程序員他需要收集什么數(shù)據(jù),這些數(shù)據(jù)該怎么處理,最后他希望看到什么結(jié)果。需求中描述的場(chǎng)景和內(nèi)容是軟件處理的核心領(lǐng)域,程序員需要通過(guò)代碼把它表現(xiàn)出來(lái)。?
即使用戶是和你一樣的程序員,需求也不可能完善到直接指導(dǎo)編碼的地步,而且軟件的構(gòu)建是一個(gè)“邪惡(Wicked)”的過(guò)程,也就是說(shuō)某些問(wèn)題在設(shè)計(jì)階段并不顯山露水,只有在構(gòu)建過(guò)程中它們才會(huì)逐漸暴露出來(lái)。這就要求程序員深入問(wèn)題的領(lǐng)域,了解領(lǐng)域的相關(guān)知識(shí),對(duì)領(lǐng)域做出合理的抽象,并在軟件構(gòu)建過(guò)程中不斷完善它,直到完全實(shí)現(xiàn)用戶需求,具備現(xiàn)代軟件的八個(gè)主要特征。
?
二。何謂領(lǐng)域和領(lǐng)域模型
?
領(lǐng)域即業(yè)務(wù)領(lǐng)域,是用戶進(jìn)行業(yè)務(wù)活動(dòng)的主要內(nèi)容。一些領(lǐng)域是和現(xiàn)實(shí)世界中的實(shí)體對(duì)應(yīng)的:如雇員管理系統(tǒng)中的雇員,圖書(shū)管理系統(tǒng)中的圖書(shū),零售系統(tǒng)中的商品,而有些領(lǐng)域
和現(xiàn)實(shí)世界中的虛擬實(shí)體相對(duì)應(yīng):如金融系統(tǒng)中的借貸關(guān)系,商務(wù)系統(tǒng)中的合同關(guān)系等。軟件的主要任務(wù)是數(shù)據(jù)的收集,整理,表現(xiàn),存儲(chǔ)和傳輸,而數(shù)據(jù)的基本單位就是領(lǐng)域模型。
?領(lǐng)域模型是現(xiàn)實(shí)世界中的實(shí)體在代碼中的體現(xiàn)和合理抽象,它能表現(xiàn)出實(shí)體的基本信息。如果可以說(shuō)軟件環(huán)境是現(xiàn)實(shí)業(yè)務(wù)活動(dòng)在計(jì)算機(jī)世界的模擬的話,那領(lǐng)域模型就是現(xiàn)實(shí)實(shí)體在計(jì)算機(jī)世界的模擬。
?
三。軟件構(gòu)建的核心是領(lǐng)域模型的建立
?領(lǐng)域模型是軟件需要處理的數(shù)據(jù)的基本單元,只有建立起了領(lǐng)域模型,你才能知道軟件需要收集,整理,表現(xiàn),存儲(chǔ)和傳輸?shù)膶?duì)象是什么。建立領(lǐng)域模型是軟件構(gòu)建的核心環(huán)節(jié),如果它沒(méi)有被合理抽象出來(lái)的話,
軟件能提供的服務(wù),數(shù)據(jù)的持久化和數(shù)據(jù)在軟件中的表現(xiàn)都是空中樓閣,因此我們可以說(shuō),從現(xiàn)實(shí)世界中的實(shí)體中抽象出合理的領(lǐng)域模型是軟件構(gòu)建中提綱挈領(lǐng)的一個(gè)環(huán)節(jié),這一步是軟件各個(gè)層次
的基石,也是軟件構(gòu)建的起點(diǎn)。不建立領(lǐng)域模型并非一定不能造就出能運(yùn)轉(zhuǎn)正常的軟件,所謂的表維護(hù)程序就是典型例子,它們由某些懶惰,愚蠢和無(wú)能的程序員造就,他們從來(lái)不去認(rèn)真思考用戶究竟想知道什
么,程序究竟在處理什么,而是翻譯堆砌代碼,僅僅讓它能跑出一個(gè)正確的結(jié)果而已,這樣的程序員永遠(yuǎn)成為不了優(yōu)秀的程序員,他們生產(chǎn)出的代碼也是一堆有危害性的幾乎無(wú)法維護(hù)的垃圾,這堆垃圾將給公司和個(gè)人帶來(lái)潛在的危害,相對(duì)而言,對(duì)個(gè)人的危害性更大,有時(shí)甚至可以斷送一個(gè)程序員的職業(yè)生涯。
?
四。如何建立起領(lǐng)域模型
?
途徑一:分析業(yè)務(wù)中的業(yè)務(wù)流和業(yè)務(wù)規(guī)則,從中歸納出功能的基本單位,這個(gè)基本單位就是領(lǐng)域模型之一或領(lǐng)域模型的一部分。
?
途徑二:從原型界面中觀察顯示的數(shù)據(jù),它們是領(lǐng)域模型的外在體現(xiàn)。
?
途徑三:從持久化介質(zhì)中推導(dǎo)領(lǐng)域模型,如從數(shù)據(jù)庫(kù)的表結(jié)構(gòu)和ER圖中推導(dǎo)領(lǐng)域模型。
?
途徑四:向領(lǐng)域?qū)<覇?wèn)詢業(yè)務(wù)流程中的核心單元是什么,甚至自己進(jìn)入問(wèn)題領(lǐng)域去學(xué)習(xí)探究。
?
途徑五:將不熟悉的領(lǐng)域和相似的自己熟悉的領(lǐng)域做對(duì)照,類比出領(lǐng)域模型。
?
途徑六:從已有的知識(shí)系統(tǒng)中學(xué)習(xí),參考功能相似的軟件代碼,向優(yōu)秀代碼學(xué)習(xí)。
?
五。如何完善領(lǐng)域模型
領(lǐng)域模型是經(jīng)常發(fā)生相互聯(lián)系的,上一步只是建立了孤立的,僅能表現(xiàn)單個(gè)領(lǐng)域?qū)ο笮畔⒌哪P?#xff0c;要使它們豐富完善起來(lái),需要做以下工作:
?1)
從程序的功能角度入手,考慮需要幾個(gè)領(lǐng)域?qū)ο蟛拍芡瓿蛇@個(gè)功能,再由此考慮領(lǐng)域?qū)ο笾g的聯(lián)系。這方面的典型例子是需要雇員類和資源類的協(xié)助,借貸關(guān)系才能完整的表現(xiàn)出來(lái)。
2)
從領(lǐng)域?qū)ο蟊旧砣胧?#xff0c;考慮領(lǐng)域?qū)ο笾g是否有級(jí)聯(lián),回溯,包含等常見(jiàn)關(guān)系。如個(gè)人信息包含地址信息,公司類和雇員類的級(jí)聯(lián)關(guān)系,雇員類查找自己所屬公司的回溯關(guān)系等。?
3)
從反持久化入手,考慮把一個(gè)領(lǐng)域?qū)ο髲拇鎯?chǔ)介質(zhì)中提取出來(lái)需要那些領(lǐng)域?qū)ο蟮膸椭?#xff0c;這些領(lǐng)域?qū)ο笫峭ㄟ^(guò)那種方式聯(lián)系在一起的,這方面的典型例子是表之間的主鍵和外鍵,領(lǐng)域?qū)ο笸瑯右惨哂邢鄬?duì)應(yīng)的成員變量。
?
六。領(lǐng)域?qū)ο笤O(shè)計(jì)完成之后
一旦領(lǐng)域?qū)ο笤O(shè)計(jì)完成,程序的設(shè)計(jì)工作就可以說(shuō)完成了一大半,其余工作都是圍繞領(lǐng)域?qū)ο髞?lái)進(jìn)行,這些工作有:
1)
從考慮怎么為領(lǐng)域?qū)ο蠓?wù)入手,為領(lǐng)域?qū)ο笤O(shè)計(jì)服務(wù)類,服務(wù)類的常用方法有添加,刪除,更新,查詢領(lǐng)域?qū)ο笏姆N以及從ID取得一個(gè)領(lǐng)域?qū)ο?#xff0c;判斷持有某個(gè)ID
的領(lǐng)域?qū)ο笫欠翊嬖诘取>唧w的操作實(shí)際上由服務(wù)類的持久層類成員完成,服務(wù)類實(shí)際上起到的是一個(gè)領(lǐng)域?qū)ο笊舷聜鬏斖ǖ赖淖饔谩R话銇?lái)說(shuō)Service
層的六大函數(shù)是add,delete
?
轉(zhuǎn)載于:https://www.cnblogs.com/xxdcxy/p/6417184.html
總結(jié)
- 上一篇: updater.exe是什么
- 下一篇: maven+jenkins自动化构件