經(jīng)過了一個(gè)上午的討論,對(duì)于UML的包圖(系統(tǒng)架構(gòu)圖)又有了更深一層的理解。
第一個(gè)圖:
簡(jiǎn)單解釋:UI:界面層,BLL:業(yè)務(wù)邏輯層:DAL:數(shù)據(jù)處理層。FUN:封裝了常用業(yè)務(wù)邏輯。
此圖不合理原因:
1、分層的原則:根據(jù)職責(zé)分層。FUN是對(duì)常用的業(yè)務(wù)邏輯的封裝,實(shí)際上也就還是BLL的部分,因此不需要將其分離出去。
2、解耦的原則:分層是為了解耦,F(xiàn)UN若是需要將BLL和DAL解耦,那么BLL與DAL之間的引用關(guān)系就不該存在,否則,F(xiàn)UN將BLL與DAL解耦了,但是BLL與DAL的耦合性依然存在,實(shí)際上沒有起到作用。
從原則上講,此圖可以改為(第二個(gè)圖):
簡(jiǎn)單解釋:
FUN和BLL同是處理業(yè)務(wù)邏輯,只是處理的業(yè)務(wù)邏輯類型不一樣,那么他們之間并沒有關(guān)聯(lián),將二者分為兩個(gè)包可行。此時(shí),包圖從原則上講得過。還可以:
第三個(gè)圖:
若從第一個(gè)圖中的出發(fā)點(diǎn)看,F(xiàn)UN和BLL之間是存在調(diào)用關(guān)系的。那么,第一個(gè)圖還有一個(gè)問題:
3、對(duì)于分層與分類概念混淆:包圖(或程序集)是為了分層,也就是為了解耦,在代碼中的體現(xiàn)是程序集之間的引用關(guān)系,而分類則是將某一些功能相似或相同的方法封裝成類,如圖一中,F(xiàn)UN是為了封裝一些常用的業(yè)務(wù)邏輯,而FUN中的類又是為BLL調(diào)用,若是分開為兩個(gè)程序集,則BLL其他的各類對(duì)于FUN中的各類的調(diào)用反而更復(fù)雜。若是改為符合原則也符合實(shí)際開發(fā)應(yīng)用,則應(yīng)該將FUN并到BLL中,不列為單獨(dú)一個(gè)包,也就是說BLL其他類調(diào)用FUN中的類是BLL層中的類調(diào)用關(guān)系,即FUN只是BLL中的一個(gè)分類,而不應(yīng)該是系統(tǒng)的一個(gè)分層。
第四個(gè)圖(左為包圖,右為BLL層中的文件夾)
或者:
第五個(gè)圖:
聯(lián)系客服