女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

什么是遺留代碼?遺留代碼處理過(guò)程拆解

OSC開(kāi)源社區(qū) ? 來(lái)源:OSCHINA 社區(qū) ? 作者:京東云開(kāi)發(fā)者-馮鴻 ? 2022-11-11 09:57 ? 次閱讀

1 什么是遺留代碼

本質(zhì)是一種技術(shù)債務(wù),產(chǎn)生原因一方面是業(yè)務(wù)原因:如業(yè)務(wù)本身場(chǎng)景繁多、流程復(fù)雜等;另一方面是技術(shù)原因:如代碼不規(guī)范、設(shè)計(jì)不合理、祖?zhèn)鞔a文檔注釋缺失等。它會(huì)影響我們的程序很多方面:如可讀性、可修改性、可復(fù)用性、可維護(hù)性、可測(cè)試性等。

2 遺留代碼處理過(guò)程拆解

劃分為梳理 -> 重構(gòu) / 重寫(xiě) -> 替換 / 驗(yàn)證三個(gè)階段 bdba9462-60ff-11ed-8abf-dac502259ad0.png

2.1 梳理

遺留代碼的處理是一種逆向工程,從已有的代碼 + 數(shù)據(jù)模型 + 文檔倒推出業(yè)務(wù)模型、交互和規(guī)則,在保真的前提下再重新構(gòu)建代碼 + 數(shù)據(jù)模型 + 文檔。

我們這里可以參考下 DDD 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)里戰(zhàn)略設(shè)計(jì)部分常用的工具(事件風(fēng)暴法)來(lái)進(jìn)行這部分梳理工作。

bdeb6556-60ff-11ed-8abf-dac502259ad0.png

事件風(fēng)暴本質(zhì)上是一種系統(tǒng)建模的方法,與它處于對(duì)等位置的,會(huì)有 “UML 建模”、“事件驅(qū)動(dòng)建模” 等。事件風(fēng)暴跟敏捷開(kāi)發(fā)里的一些理念(如用戶故事)的產(chǎn)生背景類似,都是在理性思考無(wú)法應(yīng)對(duì)變化頻繁且文字難以描述的情況下,通過(guò)一些輔助性的提示卡片、視覺(jué)手段,輔以相關(guān)人員的集中、高頻溝通來(lái)完成對(duì)于業(yè)務(wù)的準(zhǔn)確把握和抽象建模。 事件風(fēng)暴的過(guò)程:

通過(guò)梳理業(yè)務(wù)流程,創(chuàng)建相應(yīng)的領(lǐng)域事件(Event)

補(bǔ)充引發(fā)每個(gè)領(lǐng)域事件的命令(Command)

通過(guò)實(shí)體 / 聚合把命令和事件關(guān)聯(lián)起來(lái)

劃分領(lǐng)域邊界及事件流動(dòng)線條

識(shí)別用戶操作所需的關(guān)聯(lián)視圖及其角色

事件風(fēng)暴的產(chǎn)物:

領(lǐng)域?qū)ο?即實(shí)體 / 聚合。這里的領(lǐng)域?qū)ο蟛⒎菙?shù)據(jù)庫(kù)模型, 而是與業(yè)務(wù)緊密聯(lián)系的 “對(duì)象”。因?yàn)槭录L(fēng)暴是一種面向?qū)ο蟮慕7绞剑?而不是面向數(shù)據(jù)庫(kù)的建模方式。

領(lǐng)域事件 即對(duì)象在某些操作或特點(diǎn)時(shí)點(diǎn)下所產(chǎn)生的事件, 這些事件將決定之后多個(gè)聚合和限界上下文(BC)之間的通訊方式。

限界上下文 當(dāng)所有的對(duì)象(實(shí)體 / 聚合)被梳理出來(lái)后,屬于同一種 “通用語(yǔ)言” 的對(duì)象, 則會(huì)被歸入同一個(gè)限界上下文邊界內(nèi);不屬于同一種 “通用語(yǔ)言” 的對(duì)象, 則會(huì)被邊界給分割開(kāi),劃入不同的子域或限界上下文。

梳理結(jié)果示例:

be2b8be0-60ff-11ed-8abf-dac502259ad0.png

2.2 重構(gòu) / 重寫(xiě)

通過(guò)重構(gòu) / 重寫(xiě)對(duì)軟件要素進(jìn)行重新組織,使其不改變外部行為的情況下,提升代碼的可讀性或使其結(jié)構(gòu)更合理。

be730cc2-60ff-11ed-8abf-dac502259ad0.png

針對(duì)不同層次的軟件要素要做不同的處理和控制:

bf08594e-60ff-11ed-8abf-dac502259ad0.png

并且整個(gè)重構(gòu) / 重寫(xiě)過(guò)程有些需要遵照的原則:

單一職責(zé):可以將依賴歸攏,統(tǒng)一行為和控制。權(quán)責(zé)明確,場(chǎng)景明確。

單一原則:消除重復(fù)的數(shù)據(jù)聲明、行為;因?yàn)閱我凰员WC了復(fù)用,統(tǒng)一標(biāo)準(zhǔn) ,可裝配性。

封裝原則:不需要過(guò)度關(guān)心依賴類內(nèi)部實(shí)現(xiàn),最好一個(gè)。就能調(diào)用。

歸屬原則:上帝的歸上帝,凱撒的歸凱撒。誰(shuí)提供的數(shù)據(jù)更多,歸屬于誰(shuí)。

抽象層次:越高層的抽象越穩(wěn)定,越細(xì)節(jié)的東西越容易變化。舉例:接口應(yīng)傳遞職責(zé)而非實(shí)現(xiàn)細(xì)節(jié)。

開(kāi)閉原則:對(duì)修改關(guān)閉,對(duì)擴(kuò)展開(kāi)放。

kiss 原則:好理解,好維護(hù)。

清晰原則:只讀小部分代碼就可以知道怎么改邏輯,做擴(kuò)展。而不是要通讀所有代碼,才能理清。

其中有兩點(diǎn)落地細(xì)節(jié)我們具體分析下:

業(yè)務(wù)邏輯的處理
業(yè)務(wù)代碼和技術(shù)代碼解耦
主流程代碼和附加流程代碼解耦
長(zhǎng)鏈路的拆解編排

關(guān)注點(diǎn)的分離
雙向依賴:上下文之間缺少一層未被澄清的上下文,或者兩個(gè)上下文其實(shí)可被合為一個(gè);
循環(huán)依賴:任何一個(gè)上下文發(fā)生變更,依賴鏈條上的上下文均需要改變;
過(guò)深的依賴:自身依賴的信息不能直接從依賴者獲取到,需要通過(guò)依賴者從其依賴的上下文獲取并傳遞,依賴鏈路過(guò)長(zhǎng),依賴鏈條上的任何一個(gè)上下文發(fā)生變更,其鏈條后的任何一個(gè)上下文均可能需要改變;

2.3 替換驗(yàn)證

大概分為以下幾個(gè)要點(diǎn):

領(lǐng)會(huì)意圖,抽取用例,增加可復(fù)測(cè)性

增加可監(jiān)測(cè)性

分成小塊,逐步替換

試點(diǎn)、看到成效

可借助過(guò)程管理工具如 PDCA 法進(jìn)行管理

bf866bd6-60ff-11ed-8abf-dac502259ad0.png

3 案例演示

3.1 案例 1:針對(duì)強(qiáng)耦合的實(shí)現(xiàn)做重構(gòu)

原始需求:案例為一個(gè)轉(zhuǎn)賬服務(wù),用戶可以通過(guò)銀行網(wǎng)頁(yè)轉(zhuǎn)賬給另一個(gè)賬號(hào),支持跨幣種轉(zhuǎn)賬。同時(shí)因?yàn)楸O(jiān)管和對(duì)賬需求,需要記錄本次轉(zhuǎn)賬活動(dòng)。 原始架構(gòu):是一個(gè)傳統(tǒng)的三層分層結(jié)構(gòu):UI 層、業(yè)務(wù)層、和基礎(chǔ)設(shè)施層。上層對(duì)于下層有直接的依賴關(guān)系,導(dǎo)致耦合度過(guò)高。在業(yè)務(wù)層中對(duì)于下層的基礎(chǔ)設(shè)施有強(qiáng)依賴,耦合度高。我們需要對(duì)這張圖上的每個(gè)節(jié)點(diǎn)做抽象和整理,來(lái)降低對(duì)外部依賴的耦合度。

bfa0e48e-60ff-11ed-8abf-dac502259ad0.png

重構(gòu)關(guān)鍵設(shè)計(jì)點(diǎn):

c05629e8-60ff-11ed-8abf-dac502259ad0.png

重構(gòu)后代碼特征: 業(yè)務(wù)邏輯清晰,數(shù)據(jù)存儲(chǔ)和業(yè)務(wù)邏輯完全分隔。

Entity、Domain Primitive、Domain Service 都是獨(dú)立的對(duì)象,沒(méi)有任何外部依賴,但是卻包含了所有核心業(yè)務(wù)邏輯,可以單獨(dú)完整測(cè)試。

原有的轉(zhuǎn)賬服務(wù)不再包括任何計(jì)算邏輯,僅僅作為組件編排,所有邏輯均 delegate 到其他組件。

3.2 案例 2:提高老代碼的復(fù)用性

原始需求:現(xiàn)有幾個(gè)策略實(shí)現(xiàn)類,被很多代碼使用。現(xiàn)在需要根據(jù)不同的業(yè)務(wù)方在每個(gè)策略執(zhí)行前做不同的前置邏輯處理。 解法分析:盡量避免把邏輯耦合到已有的實(shí)現(xiàn)類中。引入外部類進(jìn)行控制反轉(zhuǎn)。這里我們使用訪問(wèn)者模式。 訪問(wèn)者模式把數(shù)據(jù)結(jié)構(gòu)和作用于結(jié)構(gòu)上的操作解耦合,使得操作集合可相對(duì)自由地演化。

訪問(wèn)者模式適用于數(shù)據(jù)結(jié)構(gòu)相對(duì)穩(wěn)定算法又易變化的系統(tǒng)。因?yàn)樵L問(wèn)者模式使得算法操作增加變得容易。若系統(tǒng)數(shù)據(jù)結(jié)構(gòu)對(duì)象易于變化,經(jīng)常有新的數(shù)據(jù)對(duì)象增加進(jìn)來(lái),則不適合使用訪問(wèn)者模式。訪問(wèn)者模式的優(yōu)點(diǎn)是增加操作很容易,因?yàn)樵黾硬僮饕馕吨黾有碌脑L問(wèn)者。訪問(wèn)者模式將有關(guān)行為集中到一個(gè)訪問(wèn)者對(duì)象中,其改變不影響系統(tǒng)數(shù)據(jù)結(jié)構(gòu)。其缺點(diǎn)就是增加新的數(shù)據(jù)結(jié)構(gòu)很困難。

c09c3a46-60ff-11ed-8abf-dac502259ad0.png

具體實(shí)現(xiàn):

c0df306c-60ff-11ed-8abf-dac502259ad0.pngc11b1b18-60ff-11ed-8abf-dac502259ad0.png

重構(gòu)后代碼特征: 可以通過(guò)訪問(wèn)者對(duì)老代碼邏輯進(jìn)行編排,將修改外置,減少對(duì)老邏輯的影響。通過(guò) java8 默認(rèn)接口實(shí)現(xiàn)提供默認(rèn)訪問(wèn)行為,避免大量策略子類的感知,只需要需要提供自己實(shí)現(xiàn)行為的子類對(duì)默認(rèn)實(shí)現(xiàn)進(jìn)行覆寫(xiě)。

4 總結(jié)

遺留代碼的處理能力一方面是對(duì)技術(shù)的要求,另一方面也是對(duì)業(yè)務(wù)掌握的挑戰(zhàn)。希望我們可以跨越荊棘、穿過(guò)迷霧,順利到達(dá)成功的彼岸!





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • UML
    UML
    +關(guān)注

    關(guān)注

    0

    文章

    122

    瀏覽量

    31104
  • JAVA語(yǔ)言
    +關(guān)注

    關(guān)注

    0

    文章

    138

    瀏覽量

    20518
  • PDCA
    +關(guān)注

    關(guān)注

    0

    文章

    16

    瀏覽量

    3165

原文標(biāo)題:遺留代碼處理技巧與案例演示

文章出處:【微信號(hào):OSC開(kāi)源社區(qū),微信公眾號(hào):OSC開(kāi)源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    OLED代碼分享

    OLED代碼
    發(fā)表于 04-29 17:04 ?0次下載

    沐渥科技:氮?dú)夤窆收?b class='flag-5'>代碼解讀及處理建議

    氮?dú)夤竦墓收?b class='flag-5'>代碼因品牌和型號(hào)不同而有所差異,但通常涵蓋一些常見(jiàn)問(wèn)題。以下是沐渥科技對(duì)故障代碼的解讀及處理建議:一、代碼解讀和原因分析1、E1/E01/SensorError含義:氧氣或
    的頭像 發(fā)表于 03-20 13:18 ?468次閱讀
    沐渥科技:氮?dú)夤窆收?b class='flag-5'>代碼</b>解讀及<b class='flag-5'>處理</b>建議

    創(chuàng)建了用于OpenVINO?推理的自定義C++和Python代碼,從C++代碼中獲得的結(jié)果與Python代碼不同是為什么?

    創(chuàng)建了用于OpenVINO?推理的自定義 C++ 和 Python* 代碼。 在兩個(gè)推理過(guò)程中使用相同的圖像和模型。 從 C++ 代碼中獲得的結(jié)果與 Python* 代碼不同。
    發(fā)表于 03-06 06:22

    嵌入式軟件開(kāi)發(fā)中遺留代碼的挑戰(zhàn)

    遺留代碼通常難以集成到其他系統(tǒng)、適配新數(shù)據(jù)格式或部署到現(xiàn)代平臺(tái)及云端托管環(huán)境。相關(guān)代碼可能已不再提供安全更新和補(bǔ)丁,供應(yīng)商或開(kāi)源社區(qū)的支持也可能逐漸減少甚至消失。然而,如果使用遺留
    的頭像 發(fā)表于 02-26 10:05 ?373次閱讀
    嵌入式軟件開(kāi)發(fā)中<b class='flag-5'>遺留</b><b class='flag-5'>代碼</b>的挑戰(zhàn)

    伺服故障代碼有哪些?哪些處理方法?

    伺服故障代碼有哪些?哪些處理方法?以三菱伺服驅(qū)動(dòng)器為例,下面為故障代碼分類及處理方法如下: 一、電源及連接類故障 ? ? ? 1. AL.E6/ALE6.1 - 伺服緊急停止 ? ?
    的頭像 發(fā)表于 02-06 14:06 ?2903次閱讀
    伺服故障<b class='flag-5'>代碼</b>有哪些?哪些<b class='flag-5'>處理</b>方法?

    代碼與傳統(tǒng)開(kāi)發(fā)的區(qū)別 低代碼與無(wú)代碼開(kāi)發(fā)的區(qū)別

    在軟件開(kāi)發(fā)領(lǐng)域,傳統(tǒng)開(kāi)發(fā)、低代碼開(kāi)發(fā)以及無(wú)代碼開(kāi)發(fā)是三種不同的開(kāi)發(fā)方式,每種方式都有其獨(dú)特的優(yōu)勢(shì)和適用場(chǎng)景。 一、低代碼開(kāi)發(fā)與傳統(tǒng)開(kāi)發(fā)的區(qū)別 低代碼開(kāi)發(fā)是一種新興的應(yīng)用程序開(kāi)發(fā)方法,旨
    的頭像 發(fā)表于 01-31 10:48 ?506次閱讀

    如何在日常開(kāi)發(fā)過(guò)程中提高代碼質(zhì)量

    。 提高代碼質(zhì)量是一個(gè)系統(tǒng)工程,本文主要介紹開(kāi)發(fā)人員如何在日常開(kāi)發(fā)過(guò)程中提高代碼質(zhì)量。 01 什么是代碼質(zhì)量? 代碼質(zhì)量一般用于衡量
    的頭像 發(fā)表于 01-23 09:09 ?450次閱讀
    如何在日常開(kāi)發(fā)<b class='flag-5'>過(guò)程</b>中提高<b class='flag-5'>代碼</b>質(zhì)量

    探討篇(三):代碼復(fù)用的智慧 - 提升架構(gòu)的效率與可維護(hù)性

    作者:京東物流 馮志文 前兩篇從服務(wù)粒度和服務(wù)內(nèi)的分層架構(gòu)角度探討,本文繼續(xù)從服務(wù)間代碼復(fù)用角度探討。 背景 在分布式架構(gòu)中,代碼復(fù)用是個(gè)難題。那么如何處理代碼功能共享的問(wèn)題呢?本文結(jié)
    的頭像 發(fā)表于 12-27 15:58 ?557次閱讀
    探討篇(三):<b class='flag-5'>代碼</b>復(fù)用的智慧 - 提升架構(gòu)的效率與可維護(hù)性

    代碼整潔之道-大師眼中的整潔代碼是什么樣

    幾個(gè)月前寫(xiě)了一篇文章“如何寫(xiě)出難以維護(hù)的代碼”,從中能大概了解到不好維護(hù)的代碼是什么樣,有哪些壞味道,那肯定有人會(huì)反問(wèn),難以維護(hù)的代碼見(jiàn)的太多了,也知道長(zhǎng)什么樣,但是對(duì)于好維護(hù)的代碼
    的頭像 發(fā)表于 09-09 16:30 ?603次閱讀
    <b class='flag-5'>代碼</b>整潔之道-大師眼中的整潔<b class='flag-5'>代碼</b>是什么樣

    java反編譯的代碼可以修改么

    Java反編譯是一種將編譯后的Java字節(jié)碼(.class文件)轉(zhuǎn)換回源代碼過(guò)程。反編譯后的代碼可以進(jìn)行修改,但是需要注意,反編譯代碼的質(zhì)量和可讀性可能會(huì)受到原始編譯
    的頭像 發(fā)表于 09-02 11:00 ?1166次閱讀

    ida反編譯出來(lái)代碼能直接用嗎

    IDA反編譯出來(lái)的代碼通常 不能直接使用 ,這主要基于以下幾個(gè)方面的原因: 一、代碼的不完整性 IDA反編譯生成的代碼可能缺少原始源代碼中的某些關(guān)鍵信息。在編譯
    的頭像 發(fā)表于 09-02 10:55 ?1309次閱讀

    「重構(gòu):改善既有代碼的設(shè)計(jì)」實(shí)戰(zhàn)篇

    代碼層面的整理,它更是一種軟件開(kāi)發(fā)的哲學(xué),強(qiáng)調(diào)持續(xù)改進(jìn)和適應(yīng)變化的重要性。 ? ? 書(shū)中通過(guò)詳細(xì)的案例分析和代碼示例,將理論與實(shí)踐巧妙地融合在一起。我尤其贊賞作者 如何將復(fù)雜的重構(gòu)任務(wù)拆解成一系列的小步驟 ,每一步都
    的頭像 發(fā)表于 08-14 10:42 ?527次閱讀
    「重構(gòu):改善既有<b class='flag-5'>代碼</b>的設(shè)計(jì)」實(shí)戰(zhàn)篇

    國(guó)內(nèi)低代碼平臺(tái)推薦--萬(wàn)界星空科技低代碼平臺(tái)

    代碼平臺(tái)是一種應(yīng)用程序,它為編程提供圖形用戶界面,從而以極快的速度開(kāi)發(fā)代碼,減少傳統(tǒng)編程工作。 這些工具有助于快速開(kāi)發(fā)代碼,最大限度地減少手工編碼的工作量。這些平臺(tái)不僅有助于編碼,還有助于快速設(shè)置和部署。
    的頭像 發(fā)表于 07-18 15:39 ?525次閱讀
    國(guó)內(nèi)低<b class='flag-5'>代碼</b>平臺(tái)推薦--萬(wàn)界星空科技低<b class='flag-5'>代碼</b>平臺(tái)

    該如何提高代碼容錯(cuò)率、降低代碼耦合度?

    提高RT-Thread代碼的容錯(cuò)率和降低耦合度是確保代碼質(zhì)量和可維護(hù)性的關(guān)鍵,下面列舉了幾種在編寫(xiě)代碼時(shí),提高代碼容錯(cuò)率和降低耦合度的思路。讓我們一起來(lái)看看吧~一、提高
    的頭像 發(fā)表于 06-26 08:10 ?1073次閱讀
    該如何提高<b class='flag-5'>代碼</b>容錯(cuò)率、降低<b class='flag-5'>代碼</b>耦合度?

    三菱伺服故障代碼大全及處理方法

    三菱伺服電機(jī)是工業(yè)自動(dòng)化領(lǐng)域中廣泛應(yīng)用的一種高性能電機(jī),其故障診斷和處理對(duì)于保證生產(chǎn)效率和設(shè)備穩(wěn)定性至關(guān)重要。本文將詳細(xì)介紹三菱伺服電機(jī)的故障代碼及其處理方法,以幫助用戶快速定位問(wèn)題并采取相應(yīng)措施
    的頭像 發(fā)表于 06-06 12:28 ?1.4w次閱讀