我們都知道酬荞,編寫好的代碼很重要那婉,重構(gòu)迫使我們考慮讓方法變得更小、更可復(fù)用和自文檔化忽妒。有人說注釋是有害的,自注釋的代碼才應(yīng)該是我們的追求。不管你怎么做段直,我們每個人都應(yīng)該追求易于閱讀吃溅、理解和維護(hù)的好代碼。但是代碼不會講述完整的故事坷牛。
讓我們想象一下罕偎,你新加入一個正在進(jìn)行中的軟件項目。主要的結(jié)構(gòu)單元都到位了京闰,已經(jīng)交付了一些功能。你啟動了自己的開發(fā)機甩苛,從源代碼控制系統(tǒng)下載了代碼并加載到你的開發(fā)環(huán)境中蹂楣。下一步要做什么,如何變得有效率讯蒲?
從哪開始
如果沒人有時間帶你過一遍代碼庫痊土,你可以根據(jù)對這個項目有限的了解、業(yè)務(wù)領(lǐng)域墨林、你對團(tuán)隊如何構(gòu)建軟件的期望以及你對所用技術(shù)的知識赁酝,做出自己的假設(shè)。
舉個例子旭等,你可以通過代碼庫如何被拆分為子項目酌呆、目錄、包搔耕、命名空間等對軟件系統(tǒng)的整體架構(gòu)做出一些判斷隙袁。說不定有一些正在使用的命名約定。我們甚至能夠從前面的微軟Visual Studio屏幕截圖判斷出軟件的一些特征弃榨,在這種情況下它是一個(匿名)的網(wǎng)上銀行系統(tǒng)菩收。
系統(tǒng)用C#在微軟.NET平臺上編寫。
整個.NET解決方案被分拆為很多個Visual Studio項目鲸睛,有一個被稱為ib.web的.NET Web應(yīng)用程序娜饵,你已經(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)的類庫队魏。這些僅僅是類的一種邏輯分組,還是一些更重要的東西,比如高層次組件和服務(wù)胡桨?
借助一些技術(shù)知識官帘,我能夠看到ib.web項目下潛藏了一個“服務(wù)引用”文件夾。這是Windows通信基礎(chǔ)(WCF)服務(wù)的引用昧谊,在這個例子中刽虹,基本上就是Web服務(wù)的客戶端。它們的命名似乎對應(yīng)了中間層的類庫呢诬,因此我認(rèn)為我們實際上擁有的是一個分布式系統(tǒng)涌哲,它有一個暴露了一些良好定義的服務(wù)的中間層。
代碼未描繪的設(shè)計意圖
進(jìn)一步深入代碼會幫助驗證你最初的假設(shè)正確與否尚镰,但也可能留給你一大堆問題阀圾。也許你在較高層次明白系統(tǒng)做的事情,但不明白像下面這樣的事狗唉。
軟件系統(tǒng)如何融入已有的系統(tǒng)形態(tài)初烘;
為什么會選擇正在使用的技術(shù);
軟件系統(tǒng)的整體結(jié)構(gòu)分俯;
各個組件在運行時部署在哪里肾筐,如何相互溝通;
Web層如何“知道”在哪里找到中間層缸剪;
日志/配置/錯誤的處理/其他采用了什么方法吗铐,在代碼庫中是否一致;
代碼庫中是否使用了通用的模式和原則橄登;
如何添加新功能抓歼,在哪里添加;
棧的安全性是如何實現(xiàn)的拢锹;
如何實現(xiàn)可伸縮性谣妻;
與其他系統(tǒng)的接口如何工作;
其他卒稳。
我曾被要求評審和參與開發(fā)沒有文檔的系統(tǒng)蹋半。你當(dāng)然可以從代碼的角度評估大部分問題的答案,但這會很繁重充坑。閱讀代碼的作用始終有限减江,但某些時候你可能需要向團(tuán)隊的其他人請教一些問題。如果沒有問對問題捻爷,你就得不到正確的答案:你不知道你未知的辈灼。
輔助信息
任何軟件系統(tǒng),在代碼之上都有另一個可以回答這些類型以及更多問題的信息層也榄。
代碼之上還有一個額外的信息層
這類信息和代碼是互補的巡莹,應(yīng)該在某處被捕獲司志,比如輕量級的輔助文檔,它能描述代碼自己無法描述的東西降宅。代碼會講故事骂远,但不會講述完整的故事。
【圖書推薦】
作者:Simon Brown
譯者:鄧鋼
“這是一本‘指南’型圖書腰根。作者會給你一個圖景以及達(dá)到它的關(guān)鍵技術(shù)指引激才,你可以得到一個思考問題的框架,而非一條道路或一套方法额嘿。但對于架構(gòu)師來說瘸恼,這樣就足夠了〔嵫”
——周愛民钞脂,現(xiàn)任豌豆莢架構(gòu)師,
前盛大網(wǎng)絡(luò)平臺架構(gòu)師捕儒、支付寶業(yè)務(wù)架構(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)導(dǎo)力及其與敏捷的平衡等主題的百余場演講,并于2012年8月在中國舉辦的ArchSummit全球架構(gòu)師峰會上以“郁悶的架構(gòu)師”和“如何設(shè)計安全的架構(gòu)”為主題發(fā)表演講矿咕,深受與會者好評抢肛。Simon已為全球20多個國家的軟件團(tuán)隊提供咨詢和培訓(xùn),他的客戶既有小型技術(shù)初創(chuàng)企業(yè)碳柱,也不乏全球家喻戶曉的品牌公司捡絮。
【譯者鄧鋼】
誤打誤撞進(jìn)入IT行業(yè)的80后程序員,愛好Web技術(shù)莲镣,對前端技術(shù)尤其偏愛福稳。曾在盛大創(chuàng)新院擔(dān)任前端工程師,現(xiàn)在是IBM上海的一名軟件用戶界面工程師瑞侮。除了具體的技術(shù)的圆,對軟件架構(gòu)、軟件工程也很感興趣半火,希望把自己在IBM所見所聞分享出來越妈,為前端領(lǐng)域如火如荼的工程化浪潮貢獻(xiàn)力量。
【閱讀原文京東】