新聞中心
1. 項(xiàng)目背景

快速響應(yīng)客戶需7求是企業(yè)成功的關(guān)鍵之一。在現(xiàn)代競(jìng)爭(zhēng)激烈的市場(chǎng)中,客戶需求不斷變化,企業(yè)需要快速響應(yīng)這些需求以保持競(jìng)爭(zhēng)優(yōu)勢(shì)。常見的快速響應(yīng)并滿足客戶通常有如下方案:
采用敏捷開發(fā)方法:敏捷開發(fā)方法強(qiáng)調(diào)迭代、快速響應(yīng)和持續(xù)改進(jìn),可以幫助開發(fā)團(tuán)隊(duì)更快速地開發(fā)和交付軟件。
自動(dòng)化測(cè)試和部署:自動(dòng)化測(cè)試和部署可以幫助開發(fā)團(tuán)隊(duì)更快速地檢測(cè)和解決問題,并將軟件快速部署到生產(chǎn)環(huán)境中。
使用現(xiàn)代化的開發(fā)工具和技術(shù):使用現(xiàn)代化的開發(fā)工具和技術(shù),如云計(jì)算、容器化、微服務(wù)等,可以幫助開發(fā)團(tuán)隊(duì)更快速地開發(fā)和部署軟件。
靈活的軟件架構(gòu):采用靈活的軟件架構(gòu),可以幫助開發(fā)團(tuán)隊(duì)更快速地進(jìn)行功能擴(kuò)展和改進(jìn)。
以上方法是工程、基礎(chǔ)建設(shè)和架構(gòu)設(shè)計(jì)等方面的最佳實(shí)踐,但是即便如此,開發(fā)的工作量也是以人/日計(jì)算,而且需要重新部署上線。有沒有一種不需要部署,只需要配置即可實(shí)現(xiàn)的設(shè)計(jì)和方法呢。
2. 預(yù)期目標(biāo)
快速響應(yīng)滿足客戶需求,快速開發(fā)上線,設(shè)計(jì)一個(gè)系統(tǒng),使頻繁變更的需求,更改上線按小時(shí)級(jí)計(jì)算。一般一個(gè)需求,需要設(shè)計(jì)開發(fā)、測(cè)試、發(fā)布上線等流程,整個(gè)過程至少需要1-2天,而且頻繁上線,且發(fā)布上線一般要選擇在晚上,等用戶使用低峰期,因此我們希望能達(dá)到以下目標(biāo):預(yù)期實(shí)現(xiàn)從需求提出,到發(fā)布上線,按小時(shí)計(jì)算,可快速完成需求開發(fā)、上線、交付。
3. 技術(shù)選型
為了實(shí)現(xiàn)預(yù)期目標(biāo),筆者做了深入的技術(shù)調(diào)研,動(dòng)態(tài)語(yǔ)言可以實(shí)現(xiàn)這一目標(biāo)。動(dòng)態(tài)語(yǔ)言可以實(shí)現(xiàn)熱加載,從而免去了部署的麻煩。熱加載是指在應(yīng)用程序運(yùn)行過程中,可以動(dòng)態(tài)地加載新的代碼或修改已有代碼,而無需停止或重新啟動(dòng)應(yīng)用程序。
熱加載還可以帶來如下好處:
- 快速迭代:開發(fā)人員可以在運(yùn)行時(shí)修改代碼,無需停止應(yīng)用程序,從而快速迭代和測(cè)試新功能。
- 減少停機(jī)時(shí)間:熱加載可以減少停機(jī)時(shí)間,從而提高應(yīng)用程序的可用性。
- 簡(jiǎn)化部署:熱加載可以免去部署的麻煩,從而簡(jiǎn)化部署和維護(hù)工作。
總的來說,熱加載可以提高開發(fā)效率、減少停機(jī)時(shí)間和簡(jiǎn)化部署工作。
熱加載主要有如下實(shí)現(xiàn)方式:
1)使用JEXL動(dòng)態(tài)執(zhí)行表達(dá)式:
? 優(yōu)點(diǎn):可以動(dòng)態(tài)執(zhí)行Java代碼,調(diào)用Java Function(Function需先傳入JexlContext)
◆缺點(diǎn):只能執(zhí)行一個(gè)“表達(dá)式”,而不是Function,所以有很多語(yǔ)法局限,不是真正執(zhí)行一個(gè)Function
2) 使用Java動(dòng)態(tài)編譯:
? 優(yōu)點(diǎn):功能強(qiáng)大,能夠真正實(shí)現(xiàn)完整的動(dòng)態(tài)執(zhí)行功能,能夠動(dòng)態(tài)調(diào)用全部系統(tǒng)功能和IO操作。
◆ 缺點(diǎn):雖然功能強(qiáng)大,可以編譯.java文件,但是還是很難在運(yùn)行時(shí)替換框架級(jí)的類文件。此外,因?yàn)槟軇?dòng)態(tài)調(diào)用全部系統(tǒng)功能和IO操作,但與一般代碼環(huán)境沒有隔離,這可能會(huì)成為項(xiàng)目中非常嚴(yán)重的安全隱患。
3)使用Java ScriptEngine:
? 優(yōu)點(diǎn):可以執(zhí)行完整的JS方法,并且獲取返回值;在虛擬的Context中執(zhí)行,無法調(diào)用系統(tǒng)操作和IO操作,非常安全;可以有多種優(yōu)化方式,可以預(yù)編譯,編譯后可以復(fù)用,效率接近原生Java;所有實(shí)現(xiàn)ScriptEngine接口的語(yǔ)言都可以使用,并不僅限于JS,如Groovy,Ruby等語(yǔ)言都可以動(dòng)態(tài)執(zhí)行。
◆ 缺點(diǎn):無法調(diào)用系統(tǒng)和IO操作 ,也不能使用相關(guān)js庫(kù),只能使用js的標(biāo)準(zhǔn)語(yǔ)法。
?在如何快速響應(yīng)客戶需求,快速變化的技術(shù)選型時(shí),我們先后對(duì)以上幾種技術(shù)進(jìn)行了需求和技術(shù)調(diào)研分析得出如下:
1)JEXL動(dòng)態(tài)執(zhí)行表達(dá)式,功能簡(jiǎn)單,支持有限,不滿足日常需求。
2)動(dòng)態(tài)編碼需要熱部署與熱加載,這個(gè)在之前的單機(jī)時(shí)代還可以,現(xiàn)在是微服務(wù),云服務(wù)的時(shí)代,大量機(jī)器熱部署和熱加載成本高昂且代價(jià)巨大。
3)ScriptEngine,可以動(dòng)態(tài)的執(zhí)行腳本語(yǔ)言,同時(shí)無法調(diào)用系統(tǒng)操作和IO操作,非常安全,這個(gè)給我們帶來了巨大的便利,我們選擇了 JavaScript 作為可以動(dòng)態(tài)執(zhí)行的腳本語(yǔ)言,主要還有以下原因:
JavaScript 足夠簡(jiǎn)單和強(qiáng)大,可以滿足我們的需求。
JavaScript 作為互聯(lián)網(wǎng)時(shí)代的主流語(yǔ)言,為廣大技術(shù)人員必備技能,易于使用。
開發(fā)使用環(huán)境簡(jiǎn)單,一個(gè)文本編輯器就可以寫代碼,一個(gè)瀏覽器就可以調(diào)試,非常方便。
以下是一個(gè)簡(jiǎn)單的 Java ScriptEngine 示例:
在這個(gè)示例中,我們使用 ScriptEngineManager 創(chuàng)建了一個(gè) JavaScript 的 ScriptEngine,并執(zhí)行了一段簡(jiǎn)單的 JavaScript 代碼,輸出了變量 z 的值。
除了執(zhí)行 JavaScript 代碼,ScriptEngine 還可以將 Java 對(duì)象傳遞給 JavaScript 代碼,從而實(shí)現(xiàn) Java 和 JavaScript 之間的數(shù)據(jù)交互。以下是一個(gè)示例:
例中,我們將 Java 對(duì)象 name 和 age 傳遞給了 JavaScript 代碼,并在 JavaScript 中輸出了一個(gè)字符串。
從以上示例可以看出,ScriptEngine功能強(qiáng)大,不僅支持簡(jiǎn)單的計(jì)算,而且可以支持復(fù)雜的業(yè)務(wù)計(jì)算,完全可以滿足我們?nèi)粘5男枨箝_發(fā)。
4. 設(shè)計(jì)優(yōu)勢(shì)
選定ScriptEngine后下一步是如何實(shí)現(xiàn)快速響應(yīng),實(shí)現(xiàn)日常需求。是否能實(shí)現(xiàn)片段代碼的可配置化,配置完后可以直接運(yùn)行,免發(fā)布上線。是否有必要實(shí)現(xiàn)代碼的可配置化,可配置化主要有如下優(yōu)勢(shì):
可配置化代碼可以靈活、快速地響應(yīng)客戶的需求。通過將軟件系統(tǒng)的各個(gè)模塊進(jìn)行拆分,將其變成可配置的組件,然后根據(jù)客戶的需求,選擇合適的組件進(jìn)行組合,就可以快速地定制出符合客戶需求的軟件系統(tǒng)。
可配置化代碼的優(yōu)點(diǎn)在于它可以大大提高軟件開發(fā)的靈活性和效率。比如,當(dāng)客戶提出新的需求時(shí),只需要在已有的組件庫(kù)中選擇相應(yīng)的組件進(jìn)行組合,就可以快速地完成新功能的開發(fā)。這種方式大大縮短了軟件開發(fā)的周期,同時(shí)也降低了開發(fā)成本。
可配置化代碼還可以提高軟件系統(tǒng)的可維護(hù)性和可擴(kuò)展性。由于各個(gè)模塊都是獨(dú)立的可配置組件,因此可以很容易地進(jìn)行單獨(dú)的維護(hù)和升級(jí)。同時(shí),由于組件是可配置的,因此可以很容易地進(jìn)行擴(kuò)展和替換,以適應(yīng)不同的需求。
總之,可配置化代碼是一種非常靈活,高效的技術(shù)手段,可以幫助我們快速響應(yīng)客戶需求,提高軟件開發(fā)效率和質(zhì)量。
下面,筆者從汽車之家的幾個(gè)項(xiàng)目,實(shí)踐了代碼可配置化:
對(duì)接二手車經(jīng)銷商車源數(shù)據(jù),二手車經(jīng)銷商車源數(shù)據(jù)格式各不相同,要求快速接入,快速上線展示。
導(dǎo)出車源信息到第三方網(wǎng)站展示,做推廣。第三方網(wǎng)站要求的格式也各異,而且導(dǎo)出格式也經(jīng)常變化,如何快速響應(yīng)變化,滿足客戶需求上線。
5. 系統(tǒng)設(shè)計(jì)
系統(tǒng)設(shè)計(jì)要考慮基于變和不變,變化頻度比較大的計(jì)算模塊通過JS腳本運(yùn)行,不變的部分,即整體部分通過Java設(shè)計(jì)編寫,JS腳本可通過數(shù)據(jù)庫(kù)存儲(chǔ),以方便進(jìn)行更新。 每次將待運(yùn)算的數(shù)據(jù)通過接口傳給程序,程序通過調(diào)用JS代碼計(jì)算,得出計(jì)算結(jié)果,存入數(shù)據(jù)庫(kù),具體設(shè)計(jì)如下。
圖1 利用ScriptEngine 動(dòng)態(tài)計(jì)算過程
6. 系統(tǒng)設(shè)計(jì)以及腳本的編寫
6.1腳本設(shè)計(jì)準(zhǔn)則以及適用場(chǎng)景
當(dāng)需要針對(duì)一個(gè)場(chǎng)景需求頻繁變化,規(guī)則隨時(shí)調(diào)整,上線要求時(shí)間短,有明顯的根據(jù)輸入?yún)?shù),返回結(jié)果時(shí),比較適合動(dòng)態(tài)腳本的引入。
以筆者第一個(gè)項(xiàng)目庫(kù)存導(dǎo)入為例,其場(chǎng)景如下:
A. 經(jīng)銷商會(huì)定期上傳庫(kù)存文件,各個(gè)經(jīng)銷商的庫(kù)存文件格式各不相同。
B. 經(jīng)銷商會(huì)不定時(shí)調(diào)整自己庫(kù)存的格式,比如增加一個(gè)字段、減少一個(gè)字段、字段格式變化等。
C. 整體汽車參數(shù)基本不變,能覆蓋所有經(jīng)銷商提供庫(kù)存文件的格式。
7. 具體場(chǎng)景實(shí)施
此場(chǎng)景比較適合動(dòng)態(tài)腳本解析庫(kù)存,以下是項(xiàng)目引用JS代碼片段截圖:
JS腳本保存數(shù)據(jù)庫(kù),可以隨時(shí)動(dòng)態(tài)靈活的新增,更新,避免上線。數(shù)據(jù)庫(kù)配置如下:
庫(kù)存導(dǎo)出的JS代碼片段:
庫(kù)存導(dǎo)出配置示例:
初始化ScriptEngine 引擎代碼如下:
調(diào)用JS代碼解析庫(kù)存示例代碼如下:
根據(jù)以上代碼截圖,以及流程圖,可以總結(jié)得出,整體流程如下:
1)建立經(jīng)銷商賬號(hào)。
2)根據(jù)經(jīng)銷商庫(kù)存文件編寫 JS 解析腳本,保存入數(shù)據(jù)庫(kù)。
3)根據(jù)經(jīng)銷商的賬號(hào),找經(jīng)銷商配置的導(dǎo)入Rule (javascript 代碼)。
4)把經(jīng)銷商傳入的庫(kù)存文件數(shù)據(jù)傳入 ScriptEngine 執(zhí)行 JS 解析腳本,獲得標(biāo)準(zhǔn)庫(kù)存數(shù)據(jù)。
8. 實(shí)現(xiàn)效果和收益
1)庫(kù)存導(dǎo)入JS動(dòng)態(tài)腳本上線后,庫(kù)存導(dǎo)入需求效率提高400%,由原來的 2人/日, 提高至 0.5人/日。
2)庫(kù)存導(dǎo)出JS動(dòng)態(tài)腳本上線后,庫(kù)存導(dǎo)入需求效率提高600%,由原來的 3人/日, 提高至 0.5人/日。
3)在線評(píng)分系統(tǒng)JS動(dòng)態(tài)腳本上線后,庫(kù)存導(dǎo)入需求效率提高600%,由原來的 3人/日, 提高至 0.5人/日。
4. 極大的提高了經(jīng)銷商庫(kù)存接入,導(dǎo)出效率,和庫(kù)存導(dǎo)出效率,給客戶帶來了非常好的體驗(yàn)。
9. 總結(jié)
以上是我們實(shí)踐中根據(jù)業(yè)務(wù)的實(shí)際需求,經(jīng)過深入的調(diào)研和分析后做出的技術(shù)方案和實(shí)踐,并取得了很不錯(cuò)的效果。這樣的場(chǎng)景以后還有很多,本文給快速響應(yīng)客戶需求,高效完成實(shí)際工作提供一種思路和方法。相信隨著技術(shù)的發(fā)展也許會(huì)有更好的方案和技術(shù),我們不斷探索,不斷追求進(jìn)步,歡迎有興趣的同學(xué)一起探討和學(xué)習(xí)。
作者簡(jiǎn)介
陳培鋒
■ 經(jīng)銷商事業(yè)部-經(jīng)銷商技術(shù)部-新產(chǎn)品技術(shù)團(tuán)隊(duì)。
■ 2019年加入汽車之家,負(fù)責(zé)智慧診斷產(chǎn)品研發(fā),熱衷于以客戶價(jià)值為本,解決客戶痛點(diǎn),做給客戶帶來價(jià)值產(chǎn)品。
標(biāo)題名稱:可配置化代碼快速響應(yīng)客戶需求
網(wǎng)址分享:http://www.5511xx.com/article/cosegjo.html


咨詢
建站咨詢
