2015年7月4日 星期六

程式碼的壞味道(3)

2015/7/3 21:58-22:44


上兩篇節錄了16個在重構中所提到的壞味道,
<程式碼的壞味道(1)>
<程式碼的壞味道(2)>

剩下6個壞味道,今天終於要把它們全部抄完節錄了


---

17. Inappropriate Intimacy (狎暱關係)

有時你會看到兩個classes過於親密,花費太多時間去探究彼此的private成分。如果這發生在兩個「人」之間,我們不必作衛道之士;但對於classes,我們希望他們嚴守清規。


18. Alternative Classes with Different Interfaces (異曲同工的類別)

兩個函式做同一件事,卻有著不同的署名式(signature)


19.Incomplete Library Class (不完美的程式庫類別)

復用(reuse)常被視為物件的終極目的。我們認為這實在是過度估計了(我們只是使用而已)。但無可否認,許多編程技術都建立在library classes的基礎之上,沒人敢說是不是我們都把排序演算法忘得一乾二淨了。Library classes構築者沒有未卜先知的能力,我們不能因此責怪他們。畢竟我們自己也幾乎總是在系統快要構築完成的時候才能弄清楚它的設計所以library構築者的任務真的很艱鉅。麻煩的是library的形式(form)往往不夠好,往往不可能讓我們修改其中的classes使它完成我們希望完成的工作。


20. Data Class (純稚的資料類別)

所謂Data Class是指:它們擁有一些欄位(fields),以及用於存取(讀寫)這些欄位的函式,除此之外一無長處。這樣的classes只是一種「不會說話的資料容器」,它們幾乎一定被其他classes過分細瑣地操控著。


21.Refused Bequest (被拒絕的遺贈)

subclasses應該繼承superclass的函式和資料。但如果它們不想或不需要繼承,又該怎麼辦呢?它們得到所有的禮物,卻只從中挑選幾樣來玩!


22.Comments (過多的註釋)

從嗅覺上來說,Comments不是一種壞味道:事實上它們還是一種香味呢。我們之所以要在這裡提到Comments,因為人們常把它們當作除臭劑來使用。常常會有這樣的情況:你看到一段程式碼有著常常的註釋,然後發現,這些註釋之所以存在是因為程式碼很糟糕。這種情況的發生次數之多,實在令人吃驚。
Comments可以帶我們找到本章先前提到的各種壞味道。找到壞味道之後,我們首先應該以各種重構手法把壞味道去除。完成之後我們常常會發現:註釋已經變得多餘了,因為程式碼已經清楚說明了一切。

『當你感覺需要撰寫註釋,請先嘗試重構,試著讓所有註釋都變得多餘。』


如果你不知道該做什麼,這才是註釋的良好運用時機。除了用來記述將來的打算之外,註釋還可以用來你並無十足把握的區域。你可以在註釋裡寫下自己「為什麼做某某事」。這類資訊可以幫助將來的修改者,尤其是那些健忘的傢伙。


---

書中的這個章節,我覺得是全書最精華的地方,之前翻了一點<深入淺出程式設計>,雖然有認識到一些Pattern,但是一直無法找到應用某個Pattern的時機。

就在今天利用Extract Super Class重構的時候,突然發現重構完的地方可以套用Command Pattern,突然有一種串起來的感覺,頗有成就感XD。



每個軟體工程師都應該來讀一下重構這本書。

沒有留言:

張貼留言