<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          最近,重構(gòu)了部分項(xiàng)目,談?wù)勛约旱囊恍└邢?..

          共 1987字,需瀏覽 4分鐘

           ·

          2020-11-11 17:33

          1?緣起


          最近,因?yàn)槎鄠€因素綜合作用的情況下,我有幸得以負(fù)責(zé)一個項(xiàng)目的重構(gòu)事項(xiàng),并且時間/空間上都是相當(dāng)寬松。而且由于系統(tǒng)較為復(fù)雜,需要對接多個業(yè)務(wù)開發(fā)部門,導(dǎo)致各種大需求小需求特別多,因此如果我代碼設(shè)計(jì)得爛,那么我就要面臨加班擦屁股的尷尬局面。這也導(dǎo)致了我不敢隨意寫爛代碼,盡量避免各種『破窗效應(yīng)』。因此想記錄一些比較雜碎的感想,基本上是想到哪寫到哪,不會注重文章的結(jié)構(gòu)布局。

          2 面向?qū)ο笕匀皇侵髁鞯脑O(shè)計(jì)風(fēng)格


          這里要理解什么是面向?qū)ο螅皇侨ケ辰滩闹械摹悍庋b,繼承,多態(tài)』。軟件開發(fā)本來就是講究實(shí)踐的東西,背教材是最沒用的。『封裝,繼承,多態(tài)』可能恰恰是最不重要的,重要的是這些:


          1. 什么是『控制反轉(zhuǎn)』,什么是『依賴注入』,除了在Spring/Angular這樣的框架中見到之外,對我們實(shí)際設(shè)計(jì)代碼有什么實(shí)際的啟示。
          2. 什么是『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
          瀏覽 45
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  特级成人毛片 | 久草麻豆 | 在线播放 亚洲 | 东京热影院免费AV | 免费看黄在线看 |