給大家推薦的這些書有很大一部分都是用其他語言如 C、Ruby 或者 Java 寫的,讀這些書可能是個不小的挑戰(zhàn)。還好在大多數(shù)情況下,任何編程語言都可以清晰表達(dá)編程思想,況且早點培養(yǎng)多語言編程技能也不是一件壞事。
壹 面向?qū)ο笤O(shè)計實踐指南:Ruby語言描述
作者 Sandi Metz
本書作者用修自行車來類比面向?qū)ο,從只包含一個方法的對象開始完整地實現(xiàn)Fowler在Refactoring一書中介紹的“用多態(tài)模式替換條件表達(dá)式”。這本書并不是一下扔給你一大堆概念,而是循序漸進(jìn)由淺入深地進(jìn)行講解。
貳 企業(yè)應(yīng)用架構(gòu)模式
作者 Martin Fowler
書名看起來很枯燥,不過此書包含了一系列有用的模式。讀起來就像在實現(xiàn)一個類似于 Ruby on Rails 框架食譜,所以如果說 DHH 在寫 Ruby on Rails 框架之前讀過這本書,我也不會感到驚訝。
這些模式,已被用在 Web 的表單、HTML和數(shù)據(jù)庫中。前兩類很有趣,數(shù)據(jù)庫模式還可以用于編寫現(xiàn)代的 iOS 應(yīng)用。如果你想了解一下類似于 Core Data(或者 ActiveRecord)的 ORM 是如何實現(xiàn)的,那可以看看這本書。比如,Core Data 使用了標(biāo)識映射、延遲加載、元數(shù)據(jù)映射和查詢對象等模式。
叁 重構(gòu):改善既有代碼的設(shè)計
作者 Martin Fowler
這本書也是由 Martin Fowler 編寫的。它給重構(gòu)下了一個準(zhǔn)確的定義:
有人問我,“難道重構(gòu)只是清理代碼?”,在某種程度上,答案是肯定的,但我覺得重構(gòu)更進(jìn)了一步,因為它為清理代碼提供了一個更加高效和更為可控的方式。
這本書還介紹了,重構(gòu)是如何融入通常的軟件開發(fā)過程中的:
使用重構(gòu)來開發(fā)軟件,需要把時間分為兩個部分:添加功能和重構(gòu)。添加的新功能時,不應(yīng)該改變現(xiàn)有的代碼;你只是添加新的功能。
在介紹和定義了重構(gòu)之后,F(xiàn)owler 深入講解了一系列重構(gòu)的例子。從抽取方法這種簡單的開始,然后逐漸深入到類似引入空對象的重構(gòu)方式。像之前的兩本書一樣,這本書從頭讀到尾也需要花些功夫。
肆 領(lǐng)域驅(qū)動設(shè)計——軟件核心復(fù)雜性應(yīng)對之道
作者 Eric Evans
之前的書籍大多介紹模式,這本書有一條小小的敘事線。一個開發(fā)者和一個領(lǐng)域的專家,搭建了一個管理船行程的應(yīng)用。在這個過程中,從最初的研究階段到實際的編碼過程,你將學(xué)到如何把一個領(lǐng)域模型化。我從這本書了解到 value types 比 Swift 發(fā)布它的 value types 早了兩年。
作者在程序員和領(lǐng)域?qū)<抑g編造的蘇格拉底式對話也有助于我們理解。有人認(rèn)為,在一個理想的世界中,一個產(chǎn)品經(jīng)理可以在開發(fā)者和利益相關(guān)者之間傳話。而在真實的世界中,你(作為開發(fā)者)對于表達(dá)軟件的功能和局限也負(fù)有最終的責(zé)任,這本書展示類似的應(yīng)該是什么樣子。
這四本書每一本都有各自的價值——你不僅能學(xué)到書里的知識,還能學(xué)會如何思考面臨的問題。這些書都遵循著同樣的結(jié)構(gòu):提出問題,然后給出解決方案。將問題和解決方法聯(lián)系起來,能夠看清如何解決的整個過程,最終學(xué)會如何處理其他問題。
|