讀古今文學網 > 程序員必讀之軟件架構 > 1. 地圖 >

1. 地圖

讓我們想像一下,我把你傳送出去,丟到世界上某處一條安靜、樹木茂密的鄉間小道(圖1)。你在哪裡,如何找到這個問題的答案?你可以大聲呼救,但這只在附近有人的時候才管用。或者你可以抬腿就走,直到認出什麼東西,或者遇到某些文明後向他們尋求幫助。作為極客,我們可能會打開智能手機上的地圖應用程序,用GPS來確定方位(圖2)。

從細節到大局

圖2的問題是,儘管它可以顯示我們的方位,但「放大」得有點多,沒有什麼意義。如果進一步縮小,最終我們會看到,我把你傳送到了澤西的一條鄉間小道(圖3)。

接下來的問題,衛星圖像顯示了很多細節,相對於島上一些顯著的特徵,如主要的道路和場所,很難看出我們在哪裡。為了解決這個問題,我們可以移除衛星圖像(圖4)。儘管沒有那麼詳細,這種抽像卻讓我們看到了島上一些主要的結構元素以及地名,這正是之前被細節掩蓋的。有了這張島的簡化視圖,我們可以進一步縮小,直到得到一張顯示了澤西在歐洲的確切位置的大圖(圖5、圖6和圖7)。所有這些圖像從不同的抽像層次顯示了同一個方位,每一個都可以幫助你回答不同的問題。

如果我打開一個複雜軟件系統的代碼庫,隨機突出一行代碼,探索會很有趣,但要搞明白你在哪裡以及代碼如何融入軟件系統這個整體,都要花一些時間。大多數集成開發環境都有辦法通過命名空間、包或文件夾來瀏覽代碼,但代碼庫的物理結構和邏輯結構往往是不同的。舉個例子,你可以用很多個類組成一個組件,用那些組件再組成一個可部署單元。

圖表可以作為地圖來幫助人們瀏覽一個複雜的代碼庫,這是軟件的輔助文檔最重要的組成之一。理想情況下,應該有數張簡單的圖表,各自展示軟件系統或抽像層次的不同部分。我的C4方法就總結了軟件系統的靜態結構,但也有包括應用UML在內的其他方法。