這不是你想要的DRY

banq發表於2018-12-24

“ 不要重複自己 DRY”,每個開發者都在他職業生涯的早期就學會了這個口頭禪。
對這個原則的共同理解是你不應該複製你的程式碼。就那麼簡單。
不要複製,如果你發現重複就重構。
違反此規則的行為將被其他開發人員立即指出為侵犯軟體開發最基本的做法之一。

好吧,讓我說實話。這種方法完全錯誤。一個單一的,巨大的,不幸的錯誤解釋是讓許多開發人員的生活變得更加艱難。

讓我解釋一下原因。
你知道DRY原理的原始定義嗎?

The *original* DRY principle. And it's about knowledge, not code.

我們對知識管理和一致性有了很好的洞察力,但是將其轉化為編碼領域則變得無意義。

甚至維基百科在定義DRY方面也很危險。

正如通常所解釋的那樣,DRY透過將完全不相關的程式碼部分緊密耦合在一起來傷害程式碼庫。 令人驚訝的是它如何自然地引入了不必要的,偶然的複雜性。

共享核心或庫,不斷增長的工具庫(我們都有一個),繼承樹。所有這些都是為了避免編寫兩個相似的程式碼片段的非理性需求。

有一個應對的解決方案:
重複,重複,重複。

現在讓我告訴您為什麼預設情況下重複會為您的程式碼帶來相當大的優勢.

重複能拖延決策,這是軟體開發的黃金。

以後從多個專業化比從單個方法的抽象的重構要容易十倍。

我們的大腦在前一個方向上工作得更好,向後退需要創造性的努力和顯著的認知負擔,在最壞的情況下,是橫向思維。

預先應用DRY,您將構建領域中不存在的抽象。而你正在構建它,以便將部分功能組合在一起,這些功能在不同類之間看起來顯然是相同的。

您需要學會輕鬆地複製/貼上整個類,並且只更改其命名。

還是不相信?
不同名稱空間中的兩個相同類很有可能在未來很快發生分歧,即使它們看起來完全相同。

當您預期耦合時,您會錯過這種多樣化機會並削弱您的模型。

只有當複雜性變得難以管理或模型明確要求時,才應該對抽象進行重構。預防性地執行此操作只會損害您的程式碼並引入大量意外的複雜性。

這是一種思維方式的改變,需要時間。帶上你的,耐心等待。

 

相關文章