對抽象方法仇恨的自白 - 250bpm
我之前寫過關於抽象成本的文章。一旦你在IT行業工作了幾十年,一旦你在遺留程式碼上閱讀了數百萬行,你就會對任何一種抽象產生正常的懷疑。並不是說我們可以不做抽象。我們需要它能夠編寫程式碼。但是,每次在程式碼中遇到可以避免的抽象時,您都會感到更加悲傷。有些程式碼庫比羅密歐與朱麗葉和李爾王結合起來更悲傷。
還記得上次讀一個不熟悉的程式碼庫嗎?還記得你是怎麼認為作者是一群無能的白痴?
人們可能會爭辯說這是因為遺留的東西必然是錯綜複雜的,但是嘿,那時候你只是瀏覽程式碼庫而你並沒有深入瞭解它,你生氣的原因是因為你被大量不熟悉的抽象所淹沒。(為了證明這一點,考慮一下你對程式碼庫的看法是幾個月之後,在熟悉之後。看起來好多了,不是嗎?)
牢記這種感覺。在編寫新程式碼時可以考慮它。一個不瞭解這個程式碼庫的人在閱讀時會有什麼感受?
選項不合適。要麼你想要聰明,要麼使用抽象,他們會認為你是個白痴。或者你擺脫了所有不必要的抽象。你會讓他們的生活變得更加沮喪,但他們會認為你是某種傻瓜。(他們可能會重構程式碼,使其看起來更聰明。)
我想給出一個非常基本的例子。
想象一下,要求是你的程式按順序執行A,B,C,D和E.
你可以用最愚蠢的方式做到這一點:
void main() { // Do A. ... // Do B. ... // Do C. ... // Do D. ... // Do E. ... } |
或者你可能注意到B,C和D是相關的,並構成一個邏輯工作單元:
void foo() { // Do B. ... // Do C. ... // Do D. ... } void main() { // Do A. ... foo(); // Do E. ... } |
但是C作為一個獨立的功能可能會更好。您可以想象一下某人想要從其他地方呼叫它的情況:
void bar() { // Do C. ... } void foo() { // Do B. ... bar(); // Do D. ... } void main() { // Do A. ... foo(); // Do E. ... } |
現在從休閒讀者的角度來考慮它,一個只是瀏覽程式碼的人。
當他們檢視程式碼的第一個版本時,他們可能認為作者是一個簡單的東西,但他們可以輕鬆地閱讀它。它看起來像一個故事。你可以把它看成是一部小說。那裡沒什麼好混淆的。部件的順序正確:
A B C D E |
但是,當瀏覽重構的程式碼時,不再是這種情況。你看到的是:
C B D A E |
掌握正在發生的事情要困難得多,但至少他們會欣賞作者的聰明才智。
或者也許他們不會。
相關文章
- 抽象類、抽象欄位、抽象方法抽象
- 抽象方法和抽象類抽象
- 抽象類和抽象方法抽象
- 我對抽象的理解抽象
- java抽象類和抽象方法Java抽象
- java 抽象方法Java抽象
- 抽象類和匿名方法的使用抽象
- 分解和組合的抽象方法抽象
- 資料庫的自白資料庫
- c# abstract抽象類及抽象方法_繼承C#抽象繼承
- Xposed攔截抽象方法抽象
- Java 介面與抽象方法Java抽象
- Java抽象(方法,類)和Java的介面Java抽象
- 函式式的 Promise 對非同步的抽象函式Promise非同步抽象
- java抽象繼承-模板方法Java抽象繼承
- 【抽象那些事】不完整的抽象&多方面抽象&未用的抽象&重複的抽象抽象
- 程式設計師的自白1程式設計師
- 一條記憶體的自白記憶體
- 抽象方法如何實現getInstance抽象
- 一個程式設計師的自白程式設計師
- 一個骨灰級塞班開發者的自白
- 綜合使用抽象工廠、工廠方法的應用抽象
- 介面的行為抽象和抽象類的行為抽象抽象
- 一位跨平臺開發者的自白
- 騰訊遊戲DBA團隊的發展自白遊戲
- 一個獨立開發者的失敗自白
- 一個平庸程式設計師的自白程式設計師
- 一位骨灰級塞班開發者的自白
- C#中抽象方法與虛方法的區別詳解及示例C#抽象
- c# abstract抽象類_非抽象類_virtual_虛方法_override重寫C#抽象IDE
- 吶喊-中年失業自白
- 工廠方法模式與抽象工廠模式的區別模式抽象
- AI教程:抽象韻律感圖案的製作方法AI抽象
- PHP 抽象類繼承抽象類時的注意點PHP 抽象類繼承抽象類時的注意點PHP抽象繼承
- 設計模式(三)抽象工廠方法模式設計模式抽象
- 抽象的力量抽象
- 聞“味道”招人 一個遊戲公司HR的自白遊戲
- 一個程式設計師的愛情自白程式設計師