摘要:我們在平時的工作中,總是會遇到老舊的系統(tǒng)以及老舊陳的代碼。弊端就是需要維護兩套代碼,理解兩套技術(shù)選型。那么問題就來了新的代碼如何和舊的代碼解耦新代碼我們當然是用新倉庫,新選擇,新打包工具。。。
我們在平時的工作中,總是會遇到老舊的系統(tǒng)以及老舊陳的代碼。他們是業(yè)務(wù)長年累月的積累,以及因為是三、四年前的技術(shù)選型造成的系統(tǒng)架構(gòu)的不合理以及繁瑣的代碼。維護這些代碼總是很頭疼,程序員遇到這樣的代碼總是一邊罵娘一邊憋屈的維護這,維護這些代碼選擇的方式并不多:
1.推倒重來,從設(shè)計視覺到前端代碼甚至后端接口和邏輯全是新的。
2.修舊如舊,既然這么爛了我們就讓他更爛吧,反正已經(jīng)這么惡心了。。。
3.新的邏輯啟用新的架構(gòu)和技術(shù)選型,盡量減少對舊的代碼的依賴和舊的邏輯的修改
一般來說:第一種選擇總是最好的,程序員最喜歡的,重構(gòu)么,大家都喜歡。不過也是工作量最繁重的,它需要從上到下梳理清楚現(xiàn)有業(yè)務(wù)的所有邏輯,視覺稿,交互稿,文案梳理,邏輯處理,后端接口邏輯以及測試需要回歸所有的case。當一個系統(tǒng)已經(jīng)被三四個人維護過,產(chǎn)品經(jīng)理換了四五茬,后端開發(fā)也換了三四茬,文檔不健全,梳理這樣的系統(tǒng)里的一個模塊都是需要一兩周的,一個系統(tǒng)有十來個這樣的模塊。。想想就是一個巨量的工作。再加上重構(gòu)。。。總是會遇到各種阻力的。。。
第二種選擇:修舊如舊,也會有人這么干的,“破窗戶理論”嘛,這種方案不發(fā)表評論。
第三種方案,算是一種折中的選擇,維護舊的系統(tǒng)大部分情況下是修修補補,偶爾添加一些新功能模塊。
大致示例如下:
我就在想,能不能通過稍微優(yōu)雅一點的方式來維護這些老舊代碼呢?比如舊的邏輯代碼我們盡量少的改動,對于新加模塊我們就啟用新的代碼和技術(shù)選型,這樣我們雖然在新舊兩種代碼中穿梭,不過我們大部分時間都在新的技術(shù)選型和架構(gòu)里維護代碼。也可以逐步的梳理熟悉流程,慢慢的把舊的邏輯遷移過來。弊端就是:需要維護兩套代碼,理解兩套技術(shù)選型。好處就是隨著新增業(yè)務(wù)模塊,新的代碼會越來越多,慢慢的就把舊的代碼廢棄了。
那么問題就來了:
新的代碼如何和舊的代碼解耦?新代碼我們當然是用新倉庫,新選擇,新打包工具。。。比如:我現(xiàn)在維護的一個系統(tǒng)是四五年前的一直正常的運行,代碼選項是kissy,模塊依賴也是kissy的那一套技術(shù)體系,沒有通用的UI控件,打包用的簡單的壓縮,代碼里還兼容這IE6,7,8。而實際上現(xiàn)在這套系統(tǒng)只跑在chrome上。在現(xiàn)在的視角看,有些東西就可以舍棄。
新的技術(shù)選型是:webpack,vue,ES6之類的,當然這些不是最主要的,最主要的是如何解耦新舊業(yè)務(wù)邏輯,如何在AB模塊之間插入一個A1模塊。并且這個A1模塊的js不用寫在舊的倉庫里面,不受舊的技術(shù)選型的制約。
重點來了: 發(fā)布訂閱模式(觀察者模式)觀察者設(shè)計模式定義了對象間的一種一對多的依賴關(guān)系,以便一個對象的狀態(tài)發(fā)生變化時,所有依賴于它的對象都得到通知并自動刷新。觀察者模式-百度百科
具體操作如下:
比如我們在A模塊操作之后需要A1模塊來處理則只需要在A模塊里觸發(fā)一個自定義事件A1,然后把相關(guān)數(shù)據(jù)帶過去,在A1模塊里監(jiān)聽這個事件,做相應(yīng)處理。示例代碼如下:
// A模塊 function A_active(){ //balabala...做自己的事情 $(document).trigger("A1",[data1,data2]); } //A1模塊 $(document).on("A1",function(data1,data2){ //balabala,做自己的事情 });
依次類推,你只需要在舊的代碼里插入諸如
$(document).trigger("A1",[data1,data2]);
這樣的代碼,然后在新模塊里監(jiān)聽對應(yīng)的事件這樣兩個模塊就解耦了。
發(fā)布-訂閱模式弊端世界上本沒有什么救世主,也沒有什么銀彈。。。發(fā)布-訂閱模式并不是萬能的,這只是我解決實際項目的一點心得和記錄,發(fā)布-訂閱模式弊端也是有的
發(fā)布者只能發(fā)布事件,并不知道訂閱者有哪些,常年月累,訂閱方可能遍布系統(tǒng)的各個角落。 ---你終于變成了當初最討厭的那個人--By 高德納-尼古拉斯
解決這個問題:**只能收斂發(fā)布的事件,并且盡量減少訂閱方,最主要的:文檔,一定要在文檔里記錄哪些地方有訂閱這些事件,這個文檔可以是注釋,也可以是完整的項目文檔。
----未完待續(xù)--
https://www.noway.pub/p/101.html
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/50714.html
摘要:我們在平時的工作中,總是會遇到老舊的系統(tǒng)以及老舊陳的代碼。弊端就是需要維護兩套代碼,理解兩套技術(shù)選型。那么問題就來了新的代碼如何和舊的代碼解耦新代碼我們當然是用新倉庫,新選擇,新打包工具。。。 我們在平時的工作中,總是會遇到老舊的系統(tǒng)以及老舊陳的代碼。他們是業(yè)務(wù)長年累月的積累,以及因為是三、四年前的技術(shù)選型造成的系統(tǒng)架構(gòu)的不合理以及繁瑣的代碼。維護這些代碼總是很頭疼,程序員遇到這樣的代...
摘要:提到老舊瀏覽器,我們腦海中往往復現(xiàn)的就是舊版的。但幸運的是,有一些技巧可以協(xié)助解決由老舊瀏覽器引起的的問題。放棄表單和老舊瀏覽器的最大問題是對的支持。結(jié)論如你所見,處理老舊瀏覽器所涉及的內(nèi)容不止有表單。 系列文章說明 原文 所有的web開發(fā)者都會很快(或者很痛苦地)意識到Web是一個粗糙的環(huán)境,其中最糟糕的一點就是老舊的瀏覽器。提到老舊瀏覽器,我們腦海中往往復現(xiàn)的就是舊版的IE。但...
摘要:提到老舊瀏覽器,我們腦海中往往復現(xiàn)的就是舊版的。但幸運的是,有一些技巧可以協(xié)助解決由老舊瀏覽器引起的的問題。放棄表單和老舊瀏覽器的最大問題是對的支持。結(jié)論如你所見,處理老舊瀏覽器所涉及的內(nèi)容不止有表單。 系列文章說明 原文 所有的web開發(fā)者都會很快(或者很痛苦地)意識到Web是一個粗糙的環(huán)境,其中最糟糕的一點就是老舊的瀏覽器。提到老舊瀏覽器,我們腦海中往往復現(xiàn)的就是舊版的IE。但...
摘要:對于專業(yè)的開發(fā)者來說,單元測試是一項必備的技能,多數(shù)的程序員卻不具備測試驅(qū)動開發(fā)的能力。對于工程來說,開源項目基本都嚴格遵守執(zhí)行單元測試,而很多商業(yè)的工程則在單元測試方面有所缺失。一個擁有單元測試的項目會變得更加容易維護和更改。 作為一名合格的Java程序員,日常工作除了上班擼代碼就是加班擼代碼。擼碼其實不難,無非詢問Google,StackOverflow,解決方法和demo一籮...
閱讀 2222·2021-09-30 09:47
閱讀 980·2021-08-27 13:01
閱讀 2968·2019-08-30 15:54
閱讀 3693·2019-08-30 15:53
閱讀 834·2019-08-29 14:07
閱讀 721·2019-08-28 18:16
閱讀 806·2019-08-26 18:37
閱讀 1415·2019-08-26 13:27