輪子還是重復(fù)發(fā)明

      網(wǎng)友投稿 754 2022-05-30

      “不要重復(fù)發(fā)明輪子”,很多開發(fā)者在新入行不久,就經(jīng)常會(huì)被這樣叮囑:這個(gè)世界上程序員已經(jīng)太多,遇到的問題已經(jīng)夠多,而解決方案層出不窮。你走過的路,跳下的坑,已經(jīng)有無數(shù)的先驅(qū)在你之前路過,跳過。

      所以在做技術(shù)選擇的很多時(shí)候,你不需要自己從頭去實(shí)現(xiàn)一個(gè)東西,就可以在現(xiàn)實(shí)世界中找到現(xiàn)成的趁手的利器,小到一個(gè)類庫,工具,大到一個(gè)框架,平臺(tái),來滿足自己的“需求”。你以為你看到了***的風(fēng)景,后面是一馬平川。

      而這,只是不愿意拒絕懶惰和誘惑的借口,背后很可能面臨更多的困難,陷入其中不得自拔。

      開發(fā)者在技術(shù)選型的過程中,很容易對(duì)已有的神往已久的某個(gè)技術(shù)或者工具情有獨(dú)鐘。

      ▍▍“什么都是現(xiàn)成的,直接拿來用(一套)就好了!”

      而往往忽略了它們?cè)诤笃诙ㄖ苹枨螅蛘邚椥约皵U(kuò)展方面對(duì)自己可能存在的限制。下面看兩個(gè)例子。

      輪子還是要重復(fù)發(fā)明的

      關(guān)于構(gòu)建工具的例子

      比如Maven在Java的世界里很長時(shí)間都是主要的自動(dòng)化構(gòu)建工具,它的插件化結(jié)構(gòu),提供的很多現(xiàn)成的archetype和插件,以及命令行和插件化擴(kuò)展的可能讓很多程序員眼前一亮。

      而隨著手頭的項(xiàng)目變得愈加復(fù)雜的時(shí)候,你會(huì)發(fā)現(xiàn)Maven的XML聲明式結(jié)構(gòu)和插件化,恰恰是阻礙自身伴隨項(xiàng)目復(fù)雜度進(jìn)化的絆腳石,因?yàn)樗狈`活性,以及對(duì)于自動(dòng)化測(cè)試實(shí)踐的支持,尤其在持續(xù)交付方面。

      而Ant有同樣的問題,我們不斷發(fā)現(xiàn)團(tuán)隊(duì)在不可維護(hù)的Ant和Nant構(gòu)建腳本上耗費(fèi)了巨大的精力。由于工具自身與生俱來缺少的表現(xiàn)力以及清晰的模塊性,這些腳本難以理解和擴(kuò)展。

      XML配置文件中太多讓人覺得多余的尖括號(hào),以及粗糙的插件架構(gòu)。雖然語法問題可以通過升級(jí)換代來解決,但插件化架構(gòu)嚴(yán)重限制了構(gòu)建工具隨著項(xiàng)目變得愈加復(fù)雜自我優(yōu)雅進(jìn)化的能力。我們發(fā)覺插件的抽象層次是錯(cuò)誤的,相反我們更青睞基于語言的工具,比如Gradle和Rake,因?yàn)樘峁┝思?xì)粒度的抽象,以及更多的靈活性。

      Gradle是一個(gè)把理智帶入企業(yè)級(jí)構(gòu)建世界的嘗試,它把劃時(shí)代的技術(shù)和最佳工具組合相結(jié)合。Gradle可以讓你訪問你已有的Maven倉庫,但通過清晰的領(lǐng)域特定語言為你的構(gòu)建添加腳本功能。

      相對(duì)于像Ant和Maven這樣基于XML和插件的構(gòu)建工具,像Gradle和Rake這種基于語言的構(gòu)建工具,在持續(xù)提供細(xì)粒度的抽象和更多的靈活性。這樣它們就能伴隨項(xiàng)目變得越來越復(fù)雜而隨機(jī)優(yōu)雅地應(yīng)對(duì)。

      關(guān)于前端可視化框架的例子

      另外一個(gè)例子是關(guān)于前端(可視化)框架的選擇上,一些提供了豐富UI渲染樣式的框架庫很是奪人眼球,漂亮的表格和圖表樣式,簡單的Demo示例代碼,讓開發(fā)人員都以為這是實(shí)現(xiàn)當(dāng)下棘手UI需求的不二法寶,可以極大地提高開發(fā)的效率。

      比如ExtJS,開發(fā)人員在經(jīng)歷了初期的甜蜜之后,會(huì)發(fā)現(xiàn)他們很難控制Ext渲染出的HTML和DOM,而編寫功能測(cè)試代碼看起來也不太可能,尤其是當(dāng)對(duì)UI的外觀和樣式有個(gè)性化的定制變化需求時(shí),會(huì)顯得一籌莫展。

      Ext會(huì)把你限制在它的UI實(shí)現(xiàn)思想框框里面,這樣也許可以在那些不需要投資UX的團(tuán)隊(duì)里面工作得很好。

      Highcharts是個(gè)另外一個(gè)例子,豐富的圖表類型,以及基于提供的圖表類型的定制化功能,優(yōu)異的JavaScript引擎,對(duì)HTML內(nèi)嵌SVG文檔的支持,一度是我們?cè)陧?xiàng)目中選擇前端圖表展現(xiàn)庫的不二選擇:

      但隨著對(duì)圖表渲染的個(gè)性化UX定制需求的加入,我們會(huì)發(fā)現(xiàn)Highcharts通過公開API提供的很多靈活性,比如對(duì)于X軸、Y軸和渲染細(xì)節(jié)的定制,已經(jīng)很難滿足我們對(duì)更多圖表本身的修改,和添加新的樣式。

      而這時(shí)候,如果不是讓UX設(shè)計(jì)遷就Hightcharts既有的實(shí)現(xiàn),也許更好的選擇是D3,雖然它會(huì)在開始顯得底層,需要團(tuán)隊(duì)更多的精力來創(chuàng)建通用的不那么復(fù)雜的可視化元素,但這也意味著更多的靈活性,加上它的插件模型,以及像Rickshaw和Crossfilter這樣的庫支持,會(huì)讓D3比以前更具親和性。

      最后

      所以對(duì)于技術(shù)的官方網(wǎng)站提供的所見即所得的特性展示,簡單的示例代碼,和想當(dāng)然的心滿意足,開發(fā)者需要在接受誘惑的同時(shí),多考慮一些在技術(shù)投資后可能存在的風(fēng)險(xiǎn),以及是否有足夠的支持。

      需要考量的因素和角度可能但不限于:

      文檔和社區(qū)支持的成熟度

      復(fù)雜的代碼示例

      可能的功能性需求變化

      UI呈現(xiàn)上可能的需求變化

      性能,安全等非功能性需求

      團(tuán)隊(duì)知識(shí)和學(xué)習(xí)能力

      后期的維護(hù)成本

      需要針對(duì)這些因素,做一一的評(píng)估和偵測(cè),才能最大限度地保護(hù)成本的投入。

      有的時(shí)候,你真的需要重復(fù)發(fā)明輪子。

      本文轉(zhuǎn)載自異步社區(qū)。

      渲染 開發(fā)者

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:華為云OBSA-HDFS組件正式進(jìn)入Hadoop社區(qū)
      下一篇:跨平臺(tái)應(yīng)用開發(fā)進(jìn)階(四) :uni-app 實(shí)現(xiàn)上傳圖片
      相關(guān)文章
      中文字幕亚洲综合久久菠萝蜜| 亚洲宅男天堂a在线| 亚洲理论电影在线观看| 亚洲人成自拍网站在线观看| 亚洲国产精品综合久久2007| 久久精品国产亚洲av日韩| 亚洲精品国产成人影院| 国产成人亚洲精品蜜芽影院| 亚洲精品无码成人| 亚洲最大av资源站无码av网址| 中文字幕亚洲综合小综合在线 | 国产亚洲精品精品精品| 亚洲国产精品无码久久| 亚洲人成网站18禁止| 91在线亚洲综合在线| 亚洲日产乱码一二三区别| 亚洲中文无码永久免| 亚洲AV无码之国产精品| 日韩精品亚洲专区在线影视| 国产亚洲精品美女久久久久| 亚洲午夜福利精品久久| 亚洲午夜福利717| 激情综合色五月丁香六月亚洲| 亚洲欧洲日产国码无码网站 | 男人的天堂av亚洲一区2区| 亚洲伊人精品综合在合线| 国产AV无码专区亚洲AV漫画| 亚洲日韩国产二区无码| 亚洲一区精品视频在线| 亚洲人成毛片线播放| 久久夜色精品国产嚕嚕亚洲av| 亚洲日本在线观看视频| 怡红院亚洲红怡院在线观看| 亚洲AV无码一区二区三区电影| 亚洲国产精品成人综合久久久 | 精品亚洲福利一区二区| 国产精品高清视亚洲精品| 中文字幕乱码亚洲无线三区| 久久久久久久久亚洲| 亚洲男人电影天堂| 亚洲精品在线播放|