UML類圖繪製例項

龍雲堯發表於2020-10-30

UML類圖繪製例項

下面將使用如屬官的借閱管理系統做一個圖書館管理系統的UML類圖。參考自*Library Domain Model*

最終的繪製結果大致如下:

UML class diagram example of the Library Domain Model.

前期建模

對於圖書館的借閱系統的建模,首先我們把所有需要定義的基礎類定義出來。分別是Book(書籍)、Library(圖書館)、Patron(顧客)、Librarian(圖書管理員)四個基礎的物件。

Library Domain Model-1

我們嘗試將四個基礎類進行關係連線,最後的到的關係圖如下(注,就算沒有圖書,圖書館也不會消失,因此使用空心的關聯關係:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-BEPGcFuC-1604001297893)(https://user-images.githubusercontent.com/18045191/97611044-a1408c80-1a50-11eb-8013-273235d04c70.png)]

業務擴充套件

增加使用者賬號管理

由於客戶借還書籍過程中,圖書館裡系統的後臺會希望能夠檢視該顧客的曾借用書籍,已借閱待還書籍,以及當前客戶是否有許可權進行新書的借閱。

因此我們需要在圖書館管理系統中,引入**Account(賬戶系統)**作為代理,用於方便關聯借閱的顧客和館中的書籍。

Library Domain Model-3

該UML中,圖書館持有多個賬號,這個不難理解;每個賬號代理以前每一個借書者去依賴書,也不難理解;賬號有指向Partron的關聯關係我們也不難理解,畢竟賬戶作為代理方,肯定需要有被代理的人的資訊;但是可能存在的困惑點在於Account和Patron之間的聚合關係,這裡我理解是因為在本專案設計中,賬號被設計成了可以回收利用的號碼,因此如果該賬號閒置的時候,是可以不關聯任何使用者的,直到賬號被下一次利用重新分發給新人。

增加書籍借閱資訊

管理好了借書的人,我們的圖書館管理系統還需要增加書籍管理系統,用來標記每本書籍自身的狀態,比如該書籍的條碼、RFID中的資訊、是否允許借出圖書館、圖書的類別、圖書的借出時間、圖書的借閱週期(時長)、圖書的應歸還時期等等資訊。這些都是圖書館自身作圖書管理所需要資訊而非書籍本身的資訊。

因此我們需要在原始圖書的基礎之上擴充套件一個圖書館的書目實體Book Item,裡面除了書籍自身的資訊之外,還包含了該書管理過程中的資訊。

更新之後的UML如下:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-qy6GDuIm-1604001297903)(https://user-images.githubusercontent.com/18045191/97619039-b3bfc380-1a5a-11eb-8346-d96986ebd9c6.png)]

增加檢索和管理功能

隨著圖書館書籍越來越多,圖書館管理員需要對這些書籍進行分類有序放置、對特定的書目進行查詢,顧客需要根據條件檢索自己需要的書目。因此我們需要繼續擴充套件我們的Book Item類,給其更多的資訊便於分類:比如定義其書籍語言、書籍名稱、總頁數、書目類別等等資訊。

此外我們擴充套件了原始書籍的作者資訊,雖然作者通常是在書籍分類時才會使用,但是其本身作為書籍的通識資訊,因此在類設計時,將其關聯Book而非Book Item。

同時我們需要對圖書館內所有的圖書都進行完整的歸檔管理,所以需要新增一個Catalog類來統一管理。

Library Domain Model-5

這裡,因為我們現在已經完成了Book Item的屬性擴充套件,同時建立了Catalog用於專門的圖書管理機制,Catalog本身雖然不受是否有書的影響,但是圖書館的管理和檢索的規則,是一定建立在我們的Catalog之上的,因此這裡使用組合關係。

由於賦予了顧客檢索的功能,也賦予了圖書館管理員檢索和管理圖書的功能。這裡我們不難發現兩種不同的角色都有一個重複的操作——查詢search。同時因為這個Search其實僅僅只和圖書館的目錄Catalog相關,無論誰來這個圖書館,他們其實只關心能不能找到自己需要的書,至於怎麼從Catalog中找到這本書,以及Catalog是怎麼維護所有數目的,對於查詢的人來說其實並不需要關心。

因此外部的呼叫方(比如Patron、Librarian)其實只需要呼叫這個系統提供的API(也即介面)即可,這個API是一個大家對齊過的統一的規範,比如search就是查詢本座圖書館有沒有某本書,manage就是管理這本書。外部只需要直到呼叫這個api可以達到這個目的,而至於怎麼達到這個目的則由圖書館的Catalog自行決定和具體實現。

因此最終的類圖如下:

Library Domain Model-6

結語

至此一個比較清晰的圖書館的UML類圖已經繪製完成。這次在準備繼續閱讀Spring原始碼過程中,發現自己不能老是單純只看實現,而應該從中吸取架構設計經驗的時候,發現自己在設計模式層面,知其然而不知其所以然,遂這裡先把自己的底子打好,然後再繼續我的原始碼閱讀之路。

抬頭仰望星空而不是滯於眼前三尺之地,才會知道自己有多渺小~~

相關文章