1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        軟件的精髓在于設(shè)計(jì)

        共 1611字,需瀏覽 4分鐘

         ·

        2021-12-23 13:59


        軟件的精髓在于設(shè)計(jì),設(shè)計(jì)是一件費(fèi)腦子的事情,因?yàn)檐浖O(shè)計(jì)背后是權(quán)衡的動作,比如時(shí)間換空間、空間換時(shí)間、TCP還是UDP、同步還是異步、數(shù)據(jù)冗余與一致性、微服務(wù)邊界如何劃分、架構(gòu)中的功能性邏輯與非功能性邏輯等。


        但往往很多程序員花在設(shè)計(jì)與權(quán)衡上的時(shí)間太少了,花了大量時(shí)間在寫代碼、重構(gòu)、問題排查。


        如果缺少足夠的設(shè)計(jì)思考,一上來就去寫代碼,勢必造成很多瑕疵、隱患與質(zhì)量問題存在,而這部分在未來會變成新的成本、耗費(fèi)精力,殺死你的時(shí)間。


        同樣一個(gè)架構(gòu)在早期沒有考慮好其功能性與非功能性的設(shè)計(jì)擴(kuò)展的話,未來的某一天架構(gòu)去解決高性能問題、高可用問題時(shí),因?yàn)槿鄙僮銐虻臄U(kuò)展性,難以快速解決這個(gè)問題,甚至出現(xiàn)推倒重建的情況,這部分依然是個(gè)逃不過的成本。


        重構(gòu)是件好事,但頻繁的重構(gòu)是噩夢,頻繁重構(gòu)代表了這個(gè)系統(tǒng)的設(shè)計(jì)者缺少足夠的思考,沒有留有擴(kuò)展性,沒有考慮到業(yè)務(wù)可能的發(fā)展方向,缺少規(guī)劃。不斷重構(gòu)表面上消耗了人力與時(shí)間,背后會讓團(tuán)隊(duì)情緒低落,產(chǎn)生厭倦情緒。


        如果你花了時(shí)間在架構(gòu)的設(shè)計(jì)上,比如和業(yè)務(wù)聊了下發(fā)展趨勢與變化,做好了技術(shù)難點(diǎn)細(xì)節(jié)的隔離,推敲了一段設(shè)計(jì)的合理性、風(fēng)險(xiǎn)、復(fù)雜度,看到了設(shè)計(jì)上的缺陷,那你其實(shí)不需要頻繁的重構(gòu),因?yàn)檫@些成本在日常的每一次迭代中被低成本的消化了。后續(xù)你的系統(tǒng)將會越來越輕松,越來越穩(wěn)定。


        多些時(shí)間做設(shè)計(jì),不是讓你寫了更多代碼,做了更多迭代,而是考慮到其背后的成本,減少了不必要的冗余,更快更好的交付一個(gè)更好的產(chǎn)品。


        代碼的好壞有這幾種級別:

        1)可編譯

        2)可運(yùn)行

        3)可測試

        4)可讀

        5)可維護(hù)

        6)可重用


        通過自動化測試的代碼只能達(dá)到第3)級,而通過設(shè)計(jì)的代碼少會在第4)級甚至更高。


        導(dǎo)致大家認(rèn)為沒思考時(shí)間的原因有幾個(gè):

        1. 項(xiàng)目DDL的壓力:這種情況很多人覺得要在速度和質(zhì)量上做個(gè)權(quán)衡。但偶爾的時(shí)間壓力讓我們非常痛苦是正常的,都會有幾次通宵突擊的情況,但如果這是常態(tài)就不正常了,需要和業(yè)務(wù)方與老板聊聊,背后的原因是什么;

        2. 過度的設(shè)計(jì):我們談了要多一些設(shè)計(jì)思考,但往往變成了研發(fā)同學(xué)的過度設(shè)計(jì),一些無關(guān)或成本不可控的場景被復(fù)雜且過度的設(shè)計(jì),出現(xiàn)在一個(gè)本不應(yīng)該投入的地方,導(dǎo)致舍本逐末、買櫝還珠。好的設(shè)計(jì)不是紙上談兵,需要結(jié)合實(shí)踐;

        3. 團(tuán)隊(duì)成員水平?jīng)Q定:這其實(shí)是很常見的一種情況,很多同學(xué)缺少建模與面向?qū)ο蟮脑O(shè)計(jì),在職業(yè)發(fā)展初期過多關(guān)注于高并發(fā)的術(shù),反而缺少了業(yè)務(wù)及基礎(chǔ)技術(shù)層面的積累,導(dǎo)致很多過程代碼的出現(xiàn)。團(tuán)隊(duì)是需要培訓(xùn)的,結(jié)合團(tuán)隊(duì)平均能力做合適的設(shè)計(jì),比較再好的設(shè)計(jì)也需要一群人的執(zhí)行,每一個(gè)人都有可能變成木桶的短板,而這個(gè)短板決定了整個(gè)設(shè)計(jì)的下限;


        怎么提高設(shè)計(jì)能力呢?


        我覺得最重要的方式就是多看,看看好的系統(tǒng)怎么設(shè)計(jì)、好的源碼怎么設(shè)計(jì)、好的書籍中的例子。


        比如《大話設(shè)計(jì)模式》,里面的例子看似很簡單,但有時(shí)候簡單就對了,反而沒必要搞那么復(fù)雜。


        簡單的面向?qū)ο笞龊萌缦聨讞l:

        1. 單一、簡潔、模塊化、封裝;

        2. 數(shù)據(jù)與其行為打包封裝;

        3. 程序的接口和實(shí)現(xiàn)的解耦;

        4. 組合優(yōu)于繼承;

        5. 依賴接口而不是依賴實(shí)現(xiàn);

        6. 高內(nèi)聚低耦合;


        高級一點(diǎn)的就是SOLID原則。


        當(dāng)然更推薦《UNIX編程藝術(shù)》。


        有時(shí)我們會發(fā)現(xiàn),系統(tǒng)中存在一種膠水層,最開始python、ruby也被叫做膠水語言,這一層用于粘合業(yè)務(wù)邏輯和基礎(chǔ)能力,Unix設(shè)計(jì)哲學(xué)認(rèn)為,膠水層應(yīng)該盡可能的薄,太厚了你將苦苦掙扎。


        比如我們對外部RPC、二方j(luò)ar都需要加一層防腐處理,也就是膠水層的意思,網(wǎng)關(guān)API對不同終端的不同數(shù)據(jù)結(jié)構(gòu)要求做不同的處理,也是膠水層發(fā)揮作用,千萬不要把這一層隨時(shí)可以撕掉的膠水放到邏輯層。

        瀏覽 66
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

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

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            激情五月综合色婷婷一区二区 | 99精品视频网 | 亚洲无码高清视频在线观看 | 欧美日本黄色一级视频 | 屄在线 | 大胸三级淫玉女电影 | 超碰人人人 | 北条麻妃无码中文 | 少妇高清精品毛片在线视频 | 中国毛片一级 |