UML包图理解
? ? ? ? 用例圖確定以后,用戶的需求基本上就確定了,接下來要根據(jù)用戶的要求去設(shè)計(jì)系統(tǒng)。建模的順序是由大到小、逐層解析。首先確定的就是系統(tǒng)的整體構(gòu)架,系統(tǒng)的整體構(gòu)架基本上就是包圖。
包圖的解釋:
? ? ? ?當(dāng)然包圖有非常官方的解釋,但是那些解釋都是比較抽象的。這里我都是用自己的語言來敘述包圖的意義。在UML中包圖看起來很像是一個(gè)文件夾。其實(shí)個(gè)人感覺包圖就是一個(gè)文件夾。它是UML中的專用文件夾。用來把一些相似的物件放到一起,這個(gè)就是包圖。
? ? ? ? ?個(gè)人認(rèn)為大家完全不必要拘泥于形式。大可以靈活的使用包圖,只要為了讓我們的建模看起來更簡單,更有層次感就好。
? ? ? ? 一般來說用到包圖的有兩個(gè)地方:用例包、類包。
用例包:是把一些相似的用例放到一起,這個(gè)當(dāng)然你可以從多個(gè)角度給他分類。比如角色、功能等。
類包:當(dāng)然是把一組的類放到一起。也可以說是聯(lián)系緊密的類,這個(gè)其實(shí)是我們經(jīng)常用到的。我們用它來把系統(tǒng)的架構(gòu)劃分出來,把不同作用的類放到不同的包中,把系統(tǒng)分層處理,每個(gè)包代表一層或者一個(gè)獨(dú)立的模塊。
說到這里,不能不說經(jīng)典的三層架構(gòu)中的包圖。一般的mis系統(tǒng),把不同的層放到不同的包中,這樣讓讀者很容易看明白你系統(tǒng)的框架。 ?比如:其中的UI BLL DAL 分別是三層架構(gòu)中的用戶界面層、商業(yè)邏輯層、數(shù)據(jù)處理層。 UI---> BLL----> DAL ? ? UI(BLL、 DAL)--->Entity 。 Entity表示實(shí)體類。這樣對應(yīng)以后,我們很容易看清楚系統(tǒng)的框架。根據(jù)每個(gè)包進(jìn)行設(shè)計(jì),減少了模塊之間的耦合性。
1、包應(yīng)該連貫
? ? ? ? 你插入包中的任何東西都應(yīng)該有意義,都需要考慮包中的其余內(nèi)容。為了確定一個(gè)包是否連貫,一個(gè)好的經(jīng)驗(yàn)法則是你是否能夠用一個(gè)短的,描述性的名稱為包命名。 如果你做不到這一點(diǎn),你或許就已經(jīng)把幾個(gè)不相關(guān)的事務(wù)放到包中了。
2、避免包間的循環(huán)依賴
? ? ? ? 包A依賴于包B,包B依賴于包C,而包C依賴于包A,這就形成了一個(gè)循環(huán):A-B-C-A,建議盡量避免出現(xiàn)這種情況。因?yàn)榘g彼此緊密耦合,將來的維護(hù)和改進(jìn)將變得困難。循環(huán)依賴是一個(gè)很好的信號(hào),意味著你需要重構(gòu)一個(gè)或多個(gè)的包,把導(dǎo)致循環(huán)依賴的因素從包中除掉。
3、包依賴應(yīng)該反映內(nèi)部關(guān)系
? ? ? ? 當(dāng)一個(gè)包依賴于另一個(gè)是,這意味著兩個(gè)包的內(nèi)容間存在著一個(gè)或多個(gè)的關(guān)系。例如:如果是一個(gè)用例包圖,那么就有可能兩個(gè)用例之間存在includes、extends或繼承關(guān)系,而兩個(gè)用例分別處于不同的包中。
包圖的解釋:
? ? ? ?當(dāng)然包圖有非常官方的解釋,但是那些解釋都是比較抽象的。這里我都是用自己的語言來敘述包圖的意義。在UML中包圖看起來很像是一個(gè)文件夾。其實(shí)個(gè)人感覺包圖就是一個(gè)文件夾。它是UML中的專用文件夾。用來把一些相似的物件放到一起,這個(gè)就是包圖。
? ? ? ? ?個(gè)人認(rèn)為大家完全不必要拘泥于形式。大可以靈活的使用包圖,只要為了讓我們的建模看起來更簡單,更有層次感就好。
? ? ? ? 一般來說用到包圖的有兩個(gè)地方:用例包、類包。
用例包:是把一些相似的用例放到一起,這個(gè)當(dāng)然你可以從多個(gè)角度給他分類。比如角色、功能等。
類包:當(dāng)然是把一組的類放到一起。也可以說是聯(lián)系緊密的類,這個(gè)其實(shí)是我們經(jīng)常用到的。我們用它來把系統(tǒng)的架構(gòu)劃分出來,把不同作用的類放到不同的包中,把系統(tǒng)分層處理,每個(gè)包代表一層或者一個(gè)獨(dú)立的模塊。
說到這里,不能不說經(jīng)典的三層架構(gòu)中的包圖。一般的mis系統(tǒng),把不同的層放到不同的包中,這樣讓讀者很容易看明白你系統(tǒng)的框架。 ?比如:其中的UI BLL DAL 分別是三層架構(gòu)中的用戶界面層、商業(yè)邏輯層、數(shù)據(jù)處理層。 UI---> BLL----> DAL ? ? UI(BLL、 DAL)--->Entity 。 Entity表示實(shí)體類。這樣對應(yīng)以后,我們很容易看清楚系統(tǒng)的框架。根據(jù)每個(gè)包進(jìn)行設(shè)計(jì),減少了模塊之間的耦合性。
1、包應(yīng)該連貫
? ? ? ? 你插入包中的任何東西都應(yīng)該有意義,都需要考慮包中的其余內(nèi)容。為了確定一個(gè)包是否連貫,一個(gè)好的經(jīng)驗(yàn)法則是你是否能夠用一個(gè)短的,描述性的名稱為包命名。 如果你做不到這一點(diǎn),你或許就已經(jīng)把幾個(gè)不相關(guān)的事務(wù)放到包中了。
2、避免包間的循環(huán)依賴
? ? ? ? 包A依賴于包B,包B依賴于包C,而包C依賴于包A,這就形成了一個(gè)循環(huán):A-B-C-A,建議盡量避免出現(xiàn)這種情況。因?yàn)榘g彼此緊密耦合,將來的維護(hù)和改進(jìn)將變得困難。循環(huán)依賴是一個(gè)很好的信號(hào),意味著你需要重構(gòu)一個(gè)或多個(gè)的包,把導(dǎo)致循環(huán)依賴的因素從包中除掉。
3、包依賴應(yīng)該反映內(nèi)部關(guān)系
? ? ? ? 當(dāng)一個(gè)包依賴于另一個(gè)是,這意味著兩個(gè)包的內(nèi)容間存在著一個(gè)或多個(gè)的關(guān)系。例如:如果是一個(gè)用例包圖,那么就有可能兩個(gè)用例之間存在includes、extends或繼承關(guān)系,而兩個(gè)用例分別處于不同的包中。
總結(jié)
- 上一篇: l5630鲁大师跑分_不用花钱 动一动手
- 下一篇: Java基础应用(上)