七、詳細(xì)設(shè)計(jì)
詳細(xì)設(shè)計(jì)還得從數(shù)據(jù)庫開始。作為專業(yè)菜鳥,我們要把所有的SQL語句都放在存儲過程當(dāng)中,不要放在程序里。這樣做的好處是:容易修改、維護(hù),執(zhí)行速度快、減少數(shù)據(jù)傳輸量。存儲過程可以簡單的理解為在SQL服務(wù)器上創(chuàng)建小函數(shù),它們有名字、參數(shù),通過調(diào)用這些小函數(shù),我們可以完成對表的增、刪、查、改操作,相當(dāng)于把SQL語句放在了服務(wù)器上,并且是經(jīng)過編譯的,執(zhí)行速度快。在程序中,我們不必再寫復(fù)雜的SQL語句,直接寫存儲過程名稱就可以了。
具體如何使用存儲過程,可以參考這篇博文:http://www.51testing.com/html/60/n-814760.html
一定要仔細(xì)研究上邊那篇文章,因?yàn)檫@是數(shù)據(jù)庫使用的經(jīng)典例子,把他搞懂了使用數(shù)據(jù)就沒什么問題了,我就偷個懶,不在重復(fù)寫啦。
如果遇到一些問題,或許這篇文章會幫你:http://www.51testing.com/html/59/n-814759.html
另外,可以看出,本教程的例子,班級表依賴年級表,學(xué)生表依賴班級表,所以在刪除記錄時,必須級聯(lián)刪除,級聯(lián)刪除可以在程序中完成,但我還是比較喜歡放在SQL觸發(fā)器中。觸發(fā)器的使用方法和存儲過程大同小異,在這就不贅述了,可以google。
詳細(xì)設(shè)計(jì)還是要用到UML圖,這回用的一般是時序圖和流程圖,其他的雖然重要,但是比較少用,具體的還是google。
很遺憾的告訴大家,教程到此就結(jié)束了,細(xì)節(jié)上遠(yuǎn)遠(yuǎn)沒有結(jié)束,存儲過程具體代碼、各層的代碼都沒有寫,UML的圖還有很多沒畫,但那些都是細(xì)節(jié)知識,本教程的目的是宏觀指導(dǎo),本小菜也需要繼續(xù)學(xué)習(xí),時間非常有限,所以只能寫這么多了。
剩下的基本上都是寫代碼,我寫出來也沒啥意思,開發(fā)一個項(xiàng)目,基本的流程都在這呢,我主要不是教大家寫代碼,而不是告訴大家一個項(xiàng)目的流程,體會一個稍微大點(diǎn)的程序是怎么設(shè)計(jì)出來的,分享一下我自己的經(jīng)驗(yàn)。跟著這個教程走,就是再菜,也是專業(yè)菜鳥!
教程中涉及大量知識點(diǎn),都需要大家耐心的去查閱資料,不怕不會,就怕不知道,剛開始會用就可以了,隨著學(xué)習(xí)的深入,再去搞懂細(xì)節(jié)原理。我學(xué)這些東西也不是一天兩天就學(xué)成的,是大約一年半的積累,希望大家能靜下心來,踏實(shí)學(xué)習(xí)。
最后,恭祝大家都能成為IT界的精英!
相關(guān)鏈接:
菜鳥也能飛:SQL數(shù)據(jù)庫實(shí)戰(zhàn)專業(yè)教程(一)
菜鳥也能飛:SQL數(shù)據(jù)庫實(shí)戰(zhàn)專業(yè)教程(二)SQLHelper包:

DAL包:

BLL包:

UI包:
六、概要設(shè)計(jì)
數(shù)據(jù)庫分析完了,基礎(chǔ)已經(jīng)搞定,接下來就是對程序的初步設(shè)計(jì)。如何設(shè)計(jì)呢?如果是小程序,用腦子想想,也就算設(shè)計(jì)完了,但是如果是稍微復(fù)雜點(diǎn)的系統(tǒng),恐怕就不行了。概要設(shè)計(jì)還是要借助于UML圖,現(xiàn)在你知道它有多重要了吧?我們先來設(shè)計(jì)程序的大致結(jié)構(gòu),可以用UML的包圖。作為專業(yè)水準(zhǔn)的菜鳥,我們要用三層架構(gòu)來設(shè)計(jì)程序。所謂三層架構(gòu),就是把程序分為基本的三層,分別為:UI層(用戶界面層)、BLL層(業(yè)務(wù)邏輯層)、DAL層(數(shù)據(jù)訪問層)。把程序分成三層,好處不言而喻,從此你就再也見不到所有東西都在一個窗體里混亂的情形,如果什么地方需要修改,再也不用去改動整個工程。每一層都有各自的功能,從UI層到DAL層,它們是向下依賴的。其中,UI層只負(fù)責(zé)顯示界面,不應(yīng)該有邏輯(有效性驗(yàn)證的邏輯還是可以有的),所有的功能都是通過調(diào)用BLL層完成;BLL層負(fù)責(zé)程序的所有邏輯組織,它通過調(diào)用DAL層完成復(fù)雜的操作,然后提供一個簡潔的接口讓UI層調(diào)用,相當(dāng)于一個大外觀層,BLL層的類,可以按照窗體寫,也就是說每一個窗體對應(yīng)一個BLL層的類,類的各種方法完成窗體的所有功能;DAL層負(fù)責(zé)訪問數(shù)據(jù)庫,數(shù)據(jù)庫中每一個表,在DAL層中都有一個與之對應(yīng)的操作類,通過該操作類,可以實(shí)現(xiàn)對對應(yīng)表的一切操作。前邊提到的實(shí)體類,就是為三層架構(gòu)服務(wù)的,三層之間一般都是通過實(shí)體類傳遞數(shù)據(jù),這樣簡潔、方便,實(shí)體類就相當(dāng)于一個容器。注意,還有一個層,也可以不單獨(dú)作為一個層的DBHelper,這個部分負(fù)責(zé)最低級的與數(shù)據(jù)庫交互代碼,比如連接數(shù)據(jù)庫、插入數(shù)據(jù)、查詢數(shù)據(jù)等等,把這些最基本的代碼提煉到一個單獨(dú)的層中有利于代碼的復(fù)用,使程序更加精煉。欲知其他知識,請輕點(diǎn)google,我說到此為止。獻(xiàn)上一張三層架構(gòu)的示意圖:

再來一個數(shù)據(jù)庫、DAL操作類、實(shí)體類的關(guān)系,這個有點(diǎn)亂,剛開始不好理解,多想想就知道啦:

有了上邊的分析,我們就可以用Rational Rose畫程序包圖了,提一個小技巧,Rose的包理論上應(yīng)該在包圖里畫,但是那樣沒法畫類,所以還是建議在類圖里畫包,用包把類圖分成幾個大部分,然后在每個部分里畫特定的類,這樣雙擊包直接就可以看到該包中的類了。根據(jù)三層架構(gòu),我們可以畫出下邊的包圖:

整體架構(gòu)就是這樣了,接下來就搞定每個包里都有什么類。