重復(fù)人員數(shù)據(jù)(一列數(shù)據(jù)如何查找重復(fù)數(shù)據(jù))">怎么搜索一列重復(fù)人員數(shù)據(jù)(一列數(shù)據(jù)如何查找重復(fù)數(shù)據(jù))
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è)例子。
關(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)容。