重構(gòu)代碼類的工作如何使用用戶故事

? ? ? ? 底層平臺類的功能大多是以API形式對外提供服務(wù)。當平臺持續(xù)擴充,人員一輪輪替換,不斷修改bug后,會發(fā)現(xiàn)有一些BUG已經(jīng)無法修改,增加一個新功能的代價幾乎不可以承受,修改一些BUG會導(dǎo)致另一些BUG爆發(fā)。這個時候,就到了被迫重構(gòu)的時候。

? ? ? ? 這個時候,應(yīng)該怎么重構(gòu)才能減少風險,減少對外部調(diào)用者的影響。

基本的原則:

? ? ? ? 一是不在重構(gòu)時加入新功能

? ? ? ? 二是要重構(gòu)不要重寫

? ? ? ? 三是一小步一小步重構(gòu)不要一口氣完成整個重構(gòu)

? ? ? ? 四是每一小步重構(gòu)都要進行全面的驗證后再進行下一步重構(gòu)

? ? ? ? 五是每重構(gòu)完一步都需要對之前已經(jīng)驗證過的重構(gòu)代碼進行再次驗證

? ? ? ? 滿足了這血淚得出的五個原則,就基本可以保證重構(gòu)可以成功。

? ? ? ? 而每一個原則都可以有多種實現(xiàn)方式,無論是傳統(tǒng)的瀑布開發(fā)還是敏捷開發(fā)都可以實施,無論是否使用UT、自動化還是手工測試也都可以達到目的,無論是否了解設(shè)計模式、設(shè)計原則或者DDD方法都可以進行重構(gòu)。只不過要根據(jù)自己團隊的基礎(chǔ)、經(jīng)驗來選擇合適的方式。

? ? ? ? 不過考慮到排除風險、快速重構(gòu)、減少重復(fù)工作、提高重構(gòu)質(zhì)量,建議采取如下的方式組合。


? ? ? ? 第一,采用敏捷開發(fā)方式

? ? ? ? 第二,采用用戶故事定義重構(gòu)工作

? ? ? ? 第三,采用用戶故事拆分技巧將重構(gòu)工作拆分成互相獨立的更小功能范圍的重構(gòu)用戶故事。

? ? ? ? 第四,采用DDD技術(shù)劃分領(lǐng)域范圍,重新定義職責范圍,并定義各個領(lǐng)域間的ACL。

? ? ? ? 第五,對于每個領(lǐng)域,采用軟件設(shè)計原則重新設(shè)計領(lǐng)域內(nèi)的功能職責,保證每個實現(xiàn)類滿足下列原則:單一原則解決職責問題、開閉原則解決維護變更問題、里氏代換原則解決擴展問題、依賴倒置原則解決代碼依賴問題、迪米爾原則解決代碼耦合問題。

? ? ? ? 第六,熟練使用設(shè)計模式設(shè)計軟件的靜態(tài)結(jié)構(gòu)和動態(tài)行為來滿足以上提到的原則。

? ? ? ? 創(chuàng)建模式集合:

? ? ? ? ? - 工廠模式,簡化并標準化對象創(chuàng)建過程,保證得到的對象符合使用的標準

? ? ? ? ? - 抽象工廠模式,簡化了多個工廠創(chuàng)建多個產(chǎn)品系列的標準化問題,保證一類工廠可以生產(chǎn)出對應(yīng)工廠的系列產(chǎn)品(對象)

? ? ? ? ? - 構(gòu)造者模式,簡化了定制復(fù)雜產(chǎn)品的生產(chǎn)過程,可以使得復(fù)雜產(chǎn)品的生產(chǎn)過程可以通過參數(shù)定制化,從而簡化了復(fù)雜對象的構(gòu)建過程。

? ? ? ? ? - 單例模式,保證了可以得到同一個產(chǎn)品。尤其是在高速生產(chǎn)的時候,無論以多高的速度生產(chǎn),都只會生產(chǎn)出唯一的一個產(chǎn)品。

? ? ? ? ? - 原型模式,保證了生產(chǎn)出來的產(chǎn)品自可以自我克隆。

? ? ? ? 結(jié)構(gòu)模型集合:

? ? ? ? - 適配器模式,保證不不同的產(chǎn)品間可以通過連接一個適配器滿足對方產(chǎn)品的連接或連通方式。領(lǐng)域間的ACL多用適配器實現(xiàn)。

? ? ? ? - 橋接模式,保證不同類別的產(chǎn)品都符合連接的規(guī)范,使得按照規(guī)范生產(chǎn)的產(chǎn)品可以互聯(lián)互通。

? ? ? ? - 裝飾模式,保證生產(chǎn)的產(chǎn)品可以有不同的外觀,可以隨時替換。

? ? ? ? - 代理模式,保證生產(chǎn)的產(chǎn)品可以先提供一個演示版,等需要的時候才真正生產(chǎn)產(chǎn)品。

? ? ? ? - 外觀模式,也叫總包模式,就是總裝廠協(xié)調(diào)多家不同供應(yīng)商提供原料最終組裝成成品的生產(chǎn)產(chǎn)品方式

? ? ? ? - 組合模式,生產(chǎn)俄羅斯套娃產(chǎn)品,只不過一個套娃里可以并列放入多個套娃。

? ? ? ? - 享元模式,無論生產(chǎn)多少次,只要生產(chǎn)過,就只會得到同一個產(chǎn)品。大家分享著用吧。

? ? ? ? 行為模式集合:

? ? ? ? - 策略模式:使用產(chǎn)品的時候,根據(jù)不同的使用場景,產(chǎn)品的實現(xiàn)功能會不同。

? ? ? ? - 模板方法:同系列的不同產(chǎn)品都有一個相同的功能,冰箱、電飯煲都有一個相同的液晶顯示板。

? ? ? ? ? - 觀察者模式:訂閱者模式,訂了份報紙,每天都能收到一份。

? ? ? ? - 迭代模式: 對于各種各樣的物品集合,總是能按照定義的順序?qū)⑽锲啡〕觥?/p>

? ? ? ? - 責任鏈模式:對于發(fā)生的問題,總是能一層層向上匯報尋求能夠決策處理人員。

? ? ? ? - 命令模式:管理者模式,管理者只管發(fā)號施令,具體工作由責任人負責完成。

? ? ? ? - 備忘錄模式:回滾模式,記錄每一步的修改內(nèi)容,并可以隨時回滾或前移。

? ? ? ? - 狀態(tài)模式:戀愛模式,對方的回應(yīng)取決于對方當下的心情。

? ? ? ? - 訪問者模式:追星模式,歌迷見到歌星可能會表現(xiàn)出各種不同的行為。

? ? ? ? - 中介者模式:自如模式,房東與租客可以互不見面,所有的交易活動由中介進行協(xié)調(diào)。

? ? ? ? - 解釋器模式:翻譯模式,將一段外文進行翻譯并按要求執(zhí)行。

? ? ? ? 第七,朝著理想模式,劃分出一小塊,按照各語言的重構(gòu)原則進行代碼重構(gòu)。

? ? ? ? ? 第八,自動化覆蓋核心功能

? ? ? ? ? 第九,增加單元測試代碼

? ? ? ? ? 第十,保留原有老代碼,對比新老代碼的結(jié)果

? ? ? ? ? 第十一,持續(xù)進行后續(xù)優(yōu)化

? ? ? ? ? ? 第十二,重復(fù)第一步。


以上,就是比較穩(wěn)妥的在敏捷中采用用戶故事進行功能重構(gòu)的方法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容