在繪制該時序圖的過程中我們得到了關(guān)鍵對象以及這些對象的方法,接下來把這些對象及其方法繪制在一個圖里,定義出他們的關(guān)系,就得出了分析類靜態(tài)圖:
(這個圖其實有點小問題,就是這個矩形元素代表的是設(shè)計類而不是分析類,分析類的形狀應(yīng)該是繪制時序圖那時候的圓形,也沒有 void 這個語言層次的東西,我用的建模工具是 EA ,不知道的是工具不支持在分析類中繪制方法,還是我自己沒找到。反正 rose 中是可以的)
用分析類對象實現(xiàn)用例場景的過程就是類的推導(dǎo)過程,現(xiàn)在我們已經(jīng)得到初試的類及其方法,雖然看上去還很粗糙,但已經(jīng)脫離了需求視角,進入系統(tǒng)設(shè)計的視角了。
這些分析類就是我們進行系統(tǒng)設(shè)計的基礎(chǔ)了,分析類結(jié)合采用的具體框架(比如SSH),架構(gòu)等,就可以推導(dǎo)出設(shè)計類,產(chǎn)生設(shè)計模型了。
推導(dǎo)設(shè)計類的過程由于要結(jié)合具體框架,可能要實現(xiàn)某某接口,繼承某個抽象類等原因,這里就不說了,等過段時間我再新寫一篇文章來說吧。由于我工作中的項目采用 SSH框架,所以我曾經(jīng)疑惑覺得怎么沒有看到 Action 類啊,Service類呢, pojo呢,DAO呢,沒看到!后來才恍然醒悟,哦,原來所處的抽象層次不同,分析模型的抽象層次比設(shè)計模型高,不涉及到具體的框架,架構(gòu),語言等實現(xiàn)方式,所以在這個抽象層次上,可以不去考慮實現(xiàn)細節(jié),屏蔽掉無關(guān)的信息,而專注于通過分析類的3種對象之間的交互來實現(xiàn)需求,為需求到設(shè)計之間搭建橋梁,設(shè)計模型就是在分析模型的基礎(chǔ)上結(jié)合具體框架,架構(gòu),語言等實現(xiàn)方式實例化分析模型的過程。完整而全面的分析模型就可以作為系統(tǒng)概要設(shè)計文檔了。
其實我個人覺得,從業(yè)務(wù)模型到設(shè)計模型(中間可能還有概念模型),到分析模型,再到設(shè)計模型,這種建模的過程就是一個降低抽象層次和邊界粒度的過程,類似于我們要描述一個東西,比如汽車,我們可以這樣說:站在汽車這個抽象層次上,我們看到的是車身,輪胎等邊界;降低抽象層次到車身上,我們面對的有方向盤,發(fā)動機,座位等邊界;站在發(fā)動機這個抽象層次上,我們看到的是引擎,活塞等邊界......這個抽象層次可以一直延伸下去,采用這種自頂向下的方法把一個事物描述清楚。抽象層次的好處是無論站在哪個層次上都只需要面對有限的復(fù)雜度和結(jié)構(gòu),從而幫助我們理解清楚這個層次上的對象是如何工作的。邊界和抽象層次是相伴的,不同的抽象層次面對的邊界粒度就不同。編程中所謂的“針對接口編程”,其實也就是把對對象的認識附加在接口這個邊界上,我們只要清楚他能做什么就可以,不需要降低邊界粒度去考慮具體實現(xiàn)方式,這樣才帶來了具體實現(xiàn)可替換的靈活性。
這篇文章就寫到這里吧,感覺要再往下寫,我目前也是有心無力了,畢竟以我自己目前的能力能寫出這么多來也是不容易了,雖然本問中的案例非常簡單,但是這種面向?qū)ο蟮姆治鏊悸范际且粯拥摹?/p>
福州這兩天天氣好熱,我把周末兩天都拿來寫這篇文章了,都是窩在宿舍里,邊吹空調(diào)邊寫。其實一個項目要面對的問題遠不止本文所講,比如要針對某個問題建立領(lǐng)域模型,例如權(quán)限系統(tǒng)等,本文也省略了業(yè)務(wù)規(guī)則的分析,盡管如此,我覺得已經(jīng)基本把自己想要說的表達出來了,以我目前的水平,能說這么多也算有個交代了,至少我覺得自己已經(jīng)找到了通往面向?qū)ο蠓治龅拇箝T了。路漫漫其修遠兮啊......
最后引用面向?qū)ο蟠髱烥rady Booch在2004年IBM Developer Works Live!大會的訪談中講過的一段流傳甚廣的話作為本文的結(jié)尾吧:“我對面向?qū)ο缶幊痰哪繕藦膩砭筒皇菑?fù)用。相反,對我來說,對象提供了一種處理復(fù)雜性問題的方式。這個問題可以追溯到亞里士多德:您把這個世界視為過程還是對象?在面向?qū)ο笈d起運動之前,編程以過程為中心,例如結(jié)構(gòu)化設(shè)計方法。然而,系統(tǒng)已經(jīng)到達了超越其處理能力的復(fù)雜性極點。有了對象,我們能夠通過提升抽象級別來構(gòu)建更大的、更復(fù)雜的系統(tǒng)——我認為,這才是面向?qū)ο缶幊踢\動的真正勝利”。
原文:http://blog.csdn.net/FcBayernMunchen/archive/2010/08/15/5813667.aspx
本文鏈接:http://www.95time.cn/tech/program/2010/7926.asp
出處:CSDN
責任編輯:bluehearts
上一頁 面向?qū)ο蠓治鲞^程案例實戰(zhàn) [5] 下一頁
◎進入論壇網(wǎng)絡(luò)編程版塊參加討論
|