最近,重構(gòu)了部分項(xiàng)目,談?wù)勛约旱囊恍└邢?..
1?緣起
2 面向?qū)ο笕匀皇侵髁鞯脑O(shè)計(jì)風(fēng)格
這里要理解什么是面向?qū)ο螅皇侨ケ辰滩闹械摹悍庋b,繼承,多態(tài)』。軟件開發(fā)本來就是講究實(shí)踐的東西,背教材是最沒用的。『封裝,繼承,多態(tài)』可能恰恰是最不重要的,重要的是這些:
什么是『控制反轉(zhuǎn)』,什么是『依賴注入』,除了在Spring/Angular這樣的框架中見到之外,對我們實(shí)際設(shè)計(jì)代碼有什么實(shí)際的啟示。 什么是『SOLID』原則,有什么實(shí)際啟示,哪些很容易做到,哪些看似容易實(shí)際上很難做到。
3. 世界是有狀態(tài)的,導(dǎo)致我們的代碼也是充滿了各種各樣的狀態(tài)
這其實(shí)是第一點(diǎn)的原因,大概也是面向?qū)ο箫L(fēng)格流行的原因?各種各樣的,骯臟的狀態(tài),可以讓其隱藏在一個又一個的class后面,從而限制其影響范圍。
4. 什么是『組合』,什么是『組合優(yōu)于繼承』
『組合優(yōu)于繼承』,至今不知道是什么意思,也沒有見到比較有說服力的答案。我感覺這句話很像『高內(nèi)聚低耦合』這樣很正確但是沒有什么實(shí)際作用的廢話。比如『裝飾器模式』是組合一個很經(jīng)典的例子,OK,講完『裝飾器模式』之后,我大概懂了這個模式,但是我還是沒懂『組合優(yōu)于繼承』這句話的具體意思。大概只能靠意會了吧?
5. 『繼承』沒有那么不堪,『多繼承』可能要避免
承接上一段。貌似總有人將『組合』與『繼承』對立起來,然后有選擇地舉幾個例子,說『繼承』哪哪不好,『組合』哪哪好,然后得出上面那句話的結(jié)論。這種文章一般犯了『幸存者偏差』的錯誤,一般也夾帶了很多私貨,沒有啥營養(yǎng)。
其實(shí)我倒覺得,沒有孰優(yōu)孰劣,因?yàn)閮烧咧徊贿^是兩種不同的手段而已,比如吃飯可以用刀叉,也可以用筷子,解決問題還是要看場景。繼承沒有大V們吹的那么惡心,畢竟也是根據(jù)實(shí)際問題而發(fā)明的手段,總不能一點(diǎn)用處也沒有吧?簡單用用其實(shí)挺好的,也能重用很多代碼。
但是Java有種特別不好的風(fēng)氣,就是搞巨多class,然后設(shè)計(jì)很復(fù)雜的繼承(接口)關(guān)系,層層封裝,真實(shí)意圖往往隱藏在層層代碼之后。更有甚者,幾乎每一個class都搞一個interface,美名其曰為拓展設(shè)計(jì),『過度工程』。這種風(fēng)氣下來,讓人寫Java缺少快樂的感覺,我猜大V批判Java主要是指其實(shí)是的這個吧。
反正我寫Java是挺快樂的,想到哪寫到哪,也不刻意搞很多interface,大不了到后期再提取interface就行了,反正現(xiàn)在的IDE工具都是這樣強(qiáng)大。
6. 『設(shè)計(jì)模式』很有用
這個東西真是強(qiáng)求不得,如果是強(qiáng)行搞『設(shè)計(jì)模式』,基本死得很慘,還不如不搞。在項(xiàng)目重構(gòu)的過程中,我主要使用了『工廠方法、模板方法』這幾個模式,搞出來的代碼確實(shí)讓人感到賞心悅目。特別是『模板方法』模式,我們的業(yè)務(wù)過程中有太多場景適合這個模式了,我?guī)缀跞慷际褂昧怂钠養(yǎng)ug來嗖嗖的。
7. OOP 與 FP
OOP懂一點(diǎn),F(xiàn)P基本不懂,不懂得領(lǐng)域,就不隨意評論了。對于FP,我發(fā)現(xiàn)一點(diǎn),就是總有人拿它和OOP進(jìn)行類比,列舉出個OOP的幾個缺點(diǎn)和FP的幾個優(yōu)點(diǎn),然后將OOP批判一番,然后得出『FP更優(yōu)』的結(jié)論。講真,計(jì)算機(jī)世界的很多概念和事物,是不適合用類比來理解的,就像人的食指和中指,在實(shí)際生活中,各自完成不同的功能,各司其職,從而使我們能完成各種各樣的動作。如果你硬是將其對立起來,有其一就不能有其二,這不扯淡嗎?OOP和FP同理,本來就是兩種不同場景下的手段,如果硬是將它們對立起來,得出個孰優(yōu)孰劣的結(jié)論,反而沒有什么意義。各司其職,融合著使用,才是解決之道。
8. 分層思路
任何軟件都是分層的,分層可以顯著降低人腦思考的難度,從而設(shè)計(jì)更加大型的軟件。在這種語境下面,『模塊化』『分層』等概念,基本上是某種概念的不同側(cè)重點(diǎn),基本上是同一個意思。
但是分層也不能太細(xì)太碎太多,這樣基本走向了反面,帶來了累贅。『中庸之道』才是硬道理,得靠大量積累的實(shí)際經(jīng)驗(yàn)。
9. 《重構(gòu)》、《Clean Code》
兩本好書,很影響人。
看了好幾遍了,每次看都有新的收獲,看得次數(shù)越多,逐漸地會吸收作者『只可意會不可言傳』的某些內(nèi)容。
來源:juejin.im/post/5b46121f5188251ac446d0b4
