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