chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

什么是遺留代碼?遺留代碼處理過程拆解

OSC開源社區(qū) ? 來源:OSCHINA 社區(qū) ? 作者:京東云開發(fā)者-馮鴻 ? 2022-11-11 09:57 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1 什么是遺留代碼

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

2 遺留代碼處理過程拆解

劃分為梳理 -> 重構 / 重寫 -> 替換 / 驗證三個階段 bdba9462-60ff-11ed-8abf-dac502259ad0.png

2.1 梳理

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

我們這里可以參考下 DDD 領域驅動設計里戰(zhàn)略設計部分常用的工具(事件風暴法)來進行這部分梳理工作。

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

事件風暴本質上是一種系統(tǒng)建模的方法,與它處于對等位置的,會有 “UML 建?!薄ⅰ笆录寗咏!?等。事件風暴跟敏捷開發(fā)里的一些理念(如用戶故事)的產生背景類似,都是在理性思考無法應對變化頻繁且文字難以描述的情況下,通過一些輔助性的提示卡片、視覺手段,輔以相關人員的集中、高頻溝通來完成對于業(yè)務的準確把握和抽象建模。 事件風暴的過程:

通過梳理業(yè)務流程,創(chuàng)建相應的領域事件(Event)

補充引發(fā)每個領域事件的命令(Command)

通過實體 / 聚合把命令和事件關聯(lián)起來

劃分領域邊界及事件流動線條

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

事件風暴的產物:

領域對象 即實體 / 聚合。這里的領域對象并非數(shù)據庫模型, 而是與業(yè)務緊密聯(lián)系的 “對象”。因為事件風暴是一種面向對象的建模方式, 而不是面向數(shù)據庫的建模方式。

領域事件 即對象在某些操作或特點時點下所產生的事件, 這些事件將決定之后多個聚合和限界上下文(BC)之間的通訊方式。

限界上下文 當所有的對象(實體 / 聚合)被梳理出來后,屬于同一種 “通用語言” 的對象, 則會被歸入同一個限界上下文邊界內;不屬于同一種 “通用語言” 的對象, 則會被邊界給分割開,劃入不同的子域或限界上下文。

梳理結果示例:

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

2.2 重構 / 重寫

通過重構 / 重寫對軟件要素進行重新組織,使其不改變外部行為的情況下,提升代碼的可讀性或使其結構更合理。

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

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

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

并且整個重構 / 重寫過程有些需要遵照的原則:

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

單一原則:消除重復的數(shù)據聲明、行為;因為單一所以保證了復用,統(tǒng)一標準 ,可裝配性。

封裝原則:不需要過度關心依賴類內部實現(xiàn),最好一個。就能調用。

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

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

開閉原則:對修改關閉,對擴展開放。

kiss 原則:好理解,好維護。

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

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

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

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

2.3 替換驗證

大概分為以下幾個要點:

領會意圖,抽取用例,增加可復測性

增加可監(jiān)測性

分成小塊,逐步替換

試點、看到成效

可借助過程管理工具如 PDCA 法進行管理

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

3 案例演示

3.1 案例 1:針對強耦合的實現(xiàn)做重構

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

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

重構關鍵設計點:

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

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

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

原有的轉賬服務不再包括任何計算邏輯,僅僅作為組件編排,所有邏輯均 delegate 到其他組件。

3.2 案例 2:提高老代碼的復用性

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

訪問者模式適用于數(shù)據結構相對穩(wěn)定算法又易變化的系統(tǒng)。因為訪問者模式使得算法操作增加變得容易。若系統(tǒng)數(shù)據結構對象易于變化,經常有新的數(shù)據對象增加進來,則不適合使用訪問者模式。訪問者模式的優(yōu)點是增加操作很容易,因為增加操作意味著增加新的訪問者。訪問者模式將有關行為集中到一個訪問者對象中,其改變不影響系統(tǒng)數(shù)據結構。其缺點就是增加新的數(shù)據結構很困難。

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

具體實現(xiàn):

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

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

4 總結

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





審核編輯:劉清

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

    關注

    0

    文章

    123

    瀏覽量

    31661
  • JAVA語言
    +關注

    關注

    0

    文章

    138

    瀏覽量

    21642
  • PDCA
    +關注

    關注

    0

    文章

    16

    瀏覽量

    3310

原文標題:遺留代碼處理技巧與案例演示

文章出處:【微信號:OSC開源社區(qū),微信公眾號:OSC開源社區(qū)】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    STM32N6 在 PSRAM 上運行代碼的調試

    開發(fā)其產品過程中,使用了 STM32N657X0H3Q??蛻舻?b class='flag-5'>代碼很大,不能放在SRAM 上運行,想放在 PSRAM 上去運行,并咨詢如何在 STM32CubeIDE 上進行調試。2.2. 重現(xiàn)問題關于如何將用戶代碼放置在 PS
    發(fā)表于 04-15 16:02 ?0次下載

    什么是低代碼:低代碼開發(fā)平臺詳解 5個優(yōu)質低代碼平臺工具

    企業(yè)數(shù)字化轉型的“加速器”,越來越多企業(yè)開始借助低代碼開發(fā)平臺降本增效。本文將通俗解讀低代碼、低代碼開發(fā)平臺的核心含義,拆解其核心價值,并推薦幾款主流優(yōu)質平臺,幫你快速讀懂低
    發(fā)表于 04-07 16:03

    LAT1621_STM32N6 在 PSRAM 上運行代碼的調試

    STM32N6 項目中,用戶代碼可能會比較大,此時僅用內部 SRAM 并不能滿足用代碼運行需求。那么,將代碼放置到 PSRAM 上運行也是個不錯的選擇。?客戶在開發(fā)其產品過程中,使用了
    發(fā)表于 03-11 10:44 ?0次下載

    AI代碼之爭忽略了什么

    人工智能的興起讓 COBOL 重新成為話題焦點,市場上也涌現(xiàn)出不少號稱能轉換遺留代碼、破解現(xiàn)代化難題的工具。但關鍵在于厘清這究竟意味著什么,以及它不包含什么。代碼轉換是一回事,平臺現(xiàn)代化則完全是另一碼事。這兩者并非同一概念,而橫
    的頭像 發(fā)表于 03-02 15:20 ?690次閱讀

    全景拆解固變SST四大核心軟件層的控制代碼

    在**“多核 DSP + 多片 FPGA 集群”**的分布式異構硬件架構上。 主流中高壓 固變SST 采用**“交-直-交”三級式物理拓撲**。全景拆解 固變SST 四大核心軟件層 的控制代碼,詳細說明其 實現(xiàn)
    的頭像 發(fā)表于 02-22 11:32 ?405次閱讀
    全景<b class='flag-5'>拆解</b>固變SST四大核心軟件層的控制<b class='flag-5'>代碼</b>

    D2590驅動器有哪些常見報警代碼?

    D2590驅動器的常見報警代碼主要與其運行狀態(tài)、電源、負載和反饋系統(tǒng)相關,這些代碼是故障診斷的重要依據。以下是高頻出現(xiàn)的報警代碼及其可能原因與處理建議。 一、常見報警
    的頭像 發(fā)表于 02-05 09:45 ?571次閱讀

    深入解析rk平臺Android Bootloader核心代碼:從啟動流程到AVB驗證

    作為Android設備啟動的第一道“閘門”,Bootloader(以U-Boot為主)承擔著初始化硬件、加載內核、驗證鏡像完整性的核心職責。今天我們拆解Rockchip平臺
    的頭像 發(fā)表于 01-22 07:06 ?486次閱讀
    深入解析rk平臺Android Bootloader核心<b class='flag-5'>代碼</b>:從啟動流程到AVB驗證

    講解C語言代碼的實現(xiàn)過程

    重點講解C語言代碼的實現(xiàn)過程,算法的C語言實現(xiàn)過程具有一般性,通過PID算法的C語言實現(xiàn),可以以此類推,設計其它算法的C語言實現(xiàn)。 第一步:定義PID變量結構體,代碼如下: str
    發(fā)表于 01-21 07:58

    深度解析SPL階段A/B分區(qū)啟動:spl_ab.c代碼拆解

    ( Secondary Program Loader ,二級程序加載器)作為系統(tǒng)啟動的早期階段,負責初始化硬件、選擇啟動分區(qū), spl_ab.c 正是 SPL 層處理 A/B 分區(qū)啟動的核心代碼。本文將從函數(shù)
    的頭像 發(fā)表于 01-20 07:07 ?1w次閱讀
    深度解析SPL階段A/B分區(qū)啟動:spl_ab.c<b class='flag-5'>代碼</b>全<b class='flag-5'>拆解</b>

    HarmonyOS應用代碼混淆技術方案

    代碼混淆技術可以增加代碼的復雜性和模糊性,從而提高攻擊者分析代碼的難度。
    的頭像 發(fā)表于 11-21 16:17 ?5732次閱讀
    HarmonyOS應用<b class='flag-5'>代碼</b>混淆技術方案

    代碼開發(fā)平臺推薦:2025國內低代碼開發(fā)平臺排名TOP10

    代碼開發(fā)平臺排行榜 在企業(yè)數(shù)字化轉型的浪潮中,低代碼開發(fā)平臺正逐漸成為企業(yè)實現(xiàn)高效開發(fā)和快速迭代的重要工具。隨著技術的不斷進步和市場需求的持續(xù)增長,低代碼開發(fā)平臺的市場競爭也日益激烈。以下
    的頭像 發(fā)表于 10-28 10:22 ?947次閱讀

    恩智浦推出i.MX 952人工智能應用處理

    恩智浦半導體宣布推出i.MX 9系列的新成員——i.MX 952應用處理器。該處理器專為AI視覺、人機接口(HMI)及座艙感知應用而設計,通過集成eIQ Neutron神經處理單元(NPU)驅動的傳感器融合技術,可實現(xiàn)駕駛員狀態(tài)
    的頭像 發(fā)表于 10-27 09:15 ?3692次閱讀

    2025主流低代碼平臺有哪些:低代碼開發(fā)平臺選型指南指南

    在企業(yè)數(shù)字化轉型進入深水區(qū)的當下,低代碼開發(fā)平臺已從早期的“效率工具”升級為“核心基建”。其工程化能力、流程適配深度、技術延展性與行業(yè)積淀,直接決定了企業(yè)轉型的成效。據Gartner預測,到2026
    的頭像 發(fā)表于 10-22 11:49 ?532次閱讀

    單模光纜型號字母代碼及其含義

    單模光纜的型號字母代碼主要用于標識光纜的分類、結構、護層及光纖類型等關鍵信息,以下是一些常見的單模光纜型號字母代碼及其含義: 一、光纜分類代碼 GY:通信用室外光纜,這是最常見的室外光纜分類
    的頭像 發(fā)表于 07-17 10:27 ?3610次閱讀

    OLED代碼分享

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