多如牛毛的小類
當我在做“整潔代碼”培訓或和同事討論問題時,這樣的爭端會一遍一遍的出現(xiàn):
“如果我把我的代碼全部拆分成這樣的小方法和小類,那我怎么在這么多東西中找一個想要的東西?我需要在幾十上百個文件中找來找去!”
這種觀點是有問題的,并不是他們說的不對。并且我的確有為了弄懂一個流程而在一堆的小類中仔細翻查代碼的經(jīng)歷。
如果你想徹底的理解一段代碼,如果所有代碼都能放在一起出現(xiàn)在屏幕上,這當然是***的。你可以從頂部到底部一行一行的看完。如果這些代碼是拆分在大量的小方法和小類中,你需要跟蹤哪個方法來自哪個類,無形中增加了工作量。
但我仍然認為這種觀點是錯誤的。問題在于,這種觀點的前提是你想去徹底的了解這些所有代碼。
可如果你想從一個更高層的視角,一個抽象的視角看你的代碼,那這種拆分是必不可少的。你不可能把所有的知識都放在你的大腦里。當遇到一個不是那么簡單的編程任務時,完全徹底的理解所有的代碼是不可行的。
一個現(xiàn)實中的任務通常需要你這樣做的:
- 減少你需要理解的代碼量
- 盡可能的讓代碼好理解
這其中的關鍵就是對代碼進行提煉抽象!
讓 我來問你一個問題:你是否經(jīng)常使用HashMap——或你喜歡的語言里等效的類、方法?很可能每天要使用數(shù)次,不是嗎?但你會經(jīng)常的去查看HashMap 的源代碼嗎?估計幾乎從來沒有過吧!因為我們都知道一個Map能做什么,知道HashMap是map的一個最常用的實現(xiàn)類。這就是所有我們需要知道的。我 們只是去用它。我們知道它的功能用法。我們知道當它被使用時會發(fā)生什么。
如果你能將你的方法和類進行像這樣的提煉抽象,大多數(shù)時候你根本不需要去看這些提煉出來的源代碼。你只需要看到它的名字就知道它在做什么。也許你不知道它是如何實現(xiàn)的,但你已經(jīng)知道如何使用它,如果你真的需要深入這些代碼研究,這個時候你才會遇到我們上面說的那種情況。
當然,如果你的方法和類不能像HashMap那樣明了易懂,這說明它還有改進它的空間。
原文鏈接:http://blog.schauderhaft.de/2014/01/05/tons-of-small-classes/