代碼不會講述完整的故事

我們都知道,編寫好的代碼很重要,重構(gòu)迫使我們考慮讓方法變得更小、更可復用和自文檔化。有人說注釋是有害的,自注釋的代碼才應該是我們的追求。不管你怎么做,我們每個人都應該追求易于閱讀、理解和維護的好代碼。但是代碼不會講述完整的故事。

讓我們想象一下,你新加入一個正在進行中的軟件項目。主要的結(jié)構(gòu)單元都到位了,已經(jīng)交付了一些功能。你啟動了自己的開發(fā)機,從源代碼控制系統(tǒng)下載了代碼并加載到你的開發(fā)環(huán)境中。下一步要做什么,如何變得有效率?

從哪開始

如果沒人有時間帶你過一遍代碼庫,你可以根據(jù)對這個項目有限的了解、業(yè)務領(lǐng)域、你對團隊如何構(gòu)建軟件的期望以及你對所用技術(shù)的知識,做出自己的假設。

舉個例子,你可以通過代碼庫如何被拆分為子項目、目錄、包、命名空間等對軟件系統(tǒng)的整體架構(gòu)做出一些判斷。說不定有一些正在使用的命名約定。我們甚至能夠從前面的微軟Visual Studio屏幕截圖判斷出軟件的一些特征,在這種情況下它是一個(匿名)的網(wǎng)上銀行系統(tǒng)。

系統(tǒng)用C#在微軟.NET平臺上編寫。

整個.NET解決方案被分拆為很多個Visual Studio項目,有一個被稱為ib.web的.NET Web應用程序,你已經(jīng)料到了,因為這是一個網(wǎng)上銀行系統(tǒng)(IB即“網(wǎng)上銀行”)。

系統(tǒng)似乎是由多個架構(gòu)層組成的。有ib.web和ib.middletier,但我不知道是否有物理或邏輯層。

項目看起來有一個命名約定。如,iib.middletier.authentication.lib 、ib.middletier.messaging.lib和b.middletier.bankingsystem.lib似乎都是中間層相關(guān)的類庫。這些僅僅是類的一種邏輯分組,還是一些更重要的東西,比如高層次組件和服務?

借助一些技術(shù)知識,我能夠看到ib.web項目下潛藏了一個“服務引用”文件夾。這是Windows通信基礎(WCF)服務的引用,在這個例子中,基本上就是Web服務的客戶端。它們的命名似乎對應了中間層的類庫,因此我認為我們實際上擁有的是一個分布式系統(tǒng),它有一個暴露了一些良好定義的服務的中間層。

代碼未描繪的設計意圖

進一步深入代碼會幫助驗證你最初的假設正確與否,但也可能留給你一大堆問題。也許你在較高層次明白系統(tǒng)做的事情,但不明白像下面這樣的事。

軟件系統(tǒng)如何融入已有的系統(tǒng)形態(tài);

為什么會選擇正在使用的技術(shù);

軟件系統(tǒng)的整體結(jié)構(gòu);

各個組件在運行時部署在哪里,如何相互溝通;

Web層如何“知道”在哪里找到中間層;

日志/配置/錯誤的處理/其他采用了什么方法,在代碼庫中是否一致;

代碼庫中是否使用了通用的模式和原則;

如何添加新功能,在哪里添加;

棧的安全性是如何實現(xiàn)的;

如何實現(xiàn)可伸縮性;

與其他系統(tǒng)的接口如何工作;

其他。

我曾被要求評審和參與開發(fā)沒有文檔的系統(tǒng)。你當然可以從代碼的角度評估大部分問題的答案,但這會很繁重。閱讀代碼的作用始終有限,但某些時候你可能需要向團隊的其他人請教一些問題。如果沒有問對問題,你就得不到正確的答案:你不知道你未知的。

輔助信息

任何軟件系統(tǒng),在代碼之上都有另一個可以回答這些類型以及更多問題的信息層。

代碼之上還有一個額外的信息層

這類信息和代碼是互補的,應該在某處被捕獲,比如輕量級的輔助文檔,它能描述代碼自己無法描述的東西。代碼會講故事,但不會講述完整的故事。

【圖書推薦】

作者:Simon Brown

譯者:鄧鋼

“這是一本‘指南’型圖書。作者會給你一個圖景以及達到它的關(guān)鍵技術(shù)指引,你可以得到一個思考問題的框架,而非一條道路或一套方法。但對于架構(gòu)師來說,這樣就足夠了。”

——周愛民,現(xiàn)任豌豆莢架構(gòu)師,

前盛大網(wǎng)絡平臺架構(gòu)師、支付寶業(yè)務架構(gòu)師

【作者Simon Brown】

全球知名軟件架構(gòu)獨立咨詢師、講師,創(chuàng)辦了專門討論軟件架構(gòu)問題的網(wǎng)站“編碼架構(gòu)”(codingthearchitecture.com)。他自稱是寫代碼的軟件架構(gòu)師和明白架構(gòu)的軟件開發(fā)者。自2008年以來的7年時間里,Simon在全球28個國家做過有關(guān)軟件架構(gòu)、技術(shù)領(lǐng)導力及其與敏捷的平衡等主題的百余場演講,并于2012年8月在中國舉辦的ArchSummit全球架構(gòu)師峰會上以“郁悶的架構(gòu)師”和“如何設計安全的架構(gòu)”為主題發(fā)表演講,深受與會者好評。Simon已為全球20多個國家的軟件團隊提供咨詢和培訓,他的客戶既有小型技術(shù)初創(chuàng)企業(yè),也不乏全球家喻戶曉的品牌公司。

【譯者鄧鋼】

誤打誤撞進入IT行業(yè)的80后程序員,愛好Web技術(shù),對前端技術(shù)尤其偏愛。曾在盛大創(chuàng)新院擔任前端工程師,現(xiàn)在是IBM上海的一名軟件用戶界面工程師。除了具體的技術(shù),對軟件架構(gòu)、軟件工程也很感興趣,希望把自己在IBM所見所聞分享出來,為前端領(lǐng)域如火如荼的工程化浪潮貢獻力量。

【閱讀原文京東】

閱讀原文

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容