成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何避免新代碼變包袱?阿里通用方法來了

開發(fā) 架構(gòu)
從零開始建立一個新的系統(tǒng),新寫的每行代碼都可能成為明天的歷史包袱?如何能有效的在遺留代碼上工作?今天,阿里資深技術(shù)專家輝子為我們帶來NBF框架下軟件工程架構(gòu)設(shè)計通用方法論,值得細細品讀。

什么是設(shè)計?什么是架構(gòu)?從零開始建立一個新的系統(tǒng),新寫的每行代碼都可能成為明天的歷史包袱?如何能有效的在遺留代碼上工作?今天,阿里資深技術(shù)專家輝子為我們帶來NBF框架下軟件工程架構(gòu)設(shè)計通用方法論,值得細細品讀。

[[279081]]

Note:本文討論的是基于服務(wù)化前提下的通用軟件工程架構(gòu)方法論,并未涉及到微觀設(shè)計或架構(gòu)的具體細節(jié)。

前言

即使代碼多年的人都會對這兩個問題有點蒙圈:什么是設(shè)計?什么是架構(gòu)?

從單詞上看:設(shè)計是Software Design,架構(gòu)是Software Architecture;分別對應(yīng)的作者是:Designer和Architect:

  • Architect都是Designer,但Designer未必是Architect。正如所有的架構(gòu)設(shè)計都是設(shè)計,但設(shè)計未必是架構(gòu)設(shè)計;
  • Design關(guān)注微觀代碼(inside component),Architecture關(guān)注宏觀軟件結(jié)構(gòu)(between components);
  • Architect應(yīng)該都是從Designer成長起來的。畢業(yè)了用code編寫軟件;成長了用ppt設(shè)計軟件;
  • 只會用ppt設(shè)計,但代碼寫得不好的Architect都是假的Architect;
  • Architecture里聽到比較多的詞語:Serverless、FAAS、Microservice、multi-layer、Event driven、OSGI、NBF......
  • Design里聽到比較多的詞語:SOLID、 DDD、正交設(shè)計、Design Pattern;
  • 搞不清SOLID,也不可能把軟件的層次分好,也無法理解什么是OSGI的價值;
  • 好的Designer是通往好的Architect的必經(jīng)之路。

服務(wù)化架構(gòu)的基本原則

 

如何避免新代碼變包袱?阿里通用方法來了

 

New System

從零開始建立一個新的系統(tǒng),有幾個特征:

  • 歷史包袱小
  • 上下文簡單
  • 設(shè)計的約束小
  • 新寫的每行代碼都可能成為明天的歷史包袱

由于調(diào)用方還沒有,新系統(tǒng)可以比較完美的執(zhí)行我們預(yù)想的架構(gòu)設(shè)計,但是切記,最后那行才是最重要的那行:不要讓今天的代碼成為明天的歷史包袱,新的每行代碼都在書寫歷史。

上圖的1,2,3,4代表新建系統(tǒng)的順序:

  1. 由“相”抽象出“心”:先思考,那么多的業(yè)務(wù)場景下“相”,共同的特征“心”是什么。并反向用更多的相去驗證心。
  2. 將“心”具象成領(lǐng)域模型:關(guān)注領(lǐng)域模型(Domain Model),解耦數(shù)據(jù)模型(Persistence Model):將TUNNEL SPI化。
  3. 將領(lǐng)域模型中的依賴SPI化:解耦對外部系統(tǒng)的依賴,反轉(zhuǎn)依賴控制權(quán)。
  4. Mock所有spi實現(xiàn),確保“心”領(lǐng)域模型包裹的單元測試完全通過
  5. 實現(xiàn)TUNNEL BUNDLE:設(shè)計數(shù)據(jù)模型(Persistence Model),關(guān)注“存”,“取”不關(guān)注領(lǐng)域模型。
  6. 實現(xiàn)依賴SPI適配BUNDLE:連接真實依賴服務(wù)。
  7. 包裝domain service:模型相關(guān),業(yè)務(wù)無關(guān)。
  8. 根據(jù)業(yè)務(wù)需求組合/編排domain service成為scenario bundle或者業(yè)務(wù)SOP。

Working on legacy

對于一個軟件工程師來講,寫代碼最痛苦的事情莫過于coding on legacy,但同時又給了我們各種說辭:

  • 這些代碼太爛了,改起來太費勁【需要更多人】
  • 這事做不到,因為以前系統(tǒng)架構(gòu)問題導(dǎo)致的【責(zé)任不在我】
  • 經(jīng)過我的修改,現(xiàn)在已經(jīng)好很多了,工單數(shù)量大批下降【我功勞顯著】
  • 知不知道:接手你代碼的人其實也在重復(fù)說上述3件事情

如何能有效的在遺留代碼上工作,業(yè)內(nèi)有本非常不錯的書,叫"Working Effectively with Legacy Code",值得精讀:

 

如何避免新代碼變包袱?阿里通用方法來了

 

圖片來源:書籍《Working Effectively with Legacy Code》

所以我這里的標題可能不準確,我要討論的更多是"遺留代碼的重構(gòu)",什么時候我們開始討論需要把現(xiàn)有系統(tǒng)重構(gòu):

  • 代碼確實腐化到無法正常維護,或者新加一個需求代價很大;
  • 目前代碼的技術(shù)架構(gòu)滿足不了下一步業(yè)務(wù)的發(fā)展;
  • 很多特性已經(jīng)下線作廢,卻跟有用的代碼藕斷絲連;
  • 業(yè)務(wù)邏輯隨著發(fā)展分散到不同的應(yīng)用里,界限不清;
  • 專家級的未雨綢繆,著眼未來的規(guī)劃和新技術(shù)的應(yīng)用;
  • 換老大了,需要立新的flag。

架構(gòu)的基本原則依然是上面那幅圖。但上下文的不同,我們的發(fā)力點和優(yōu)先級有明顯的區(qū)別。阿里整個體系里的依賴關(guān)系錯綜復(fù)雜,要對阿里環(huán)境下的系統(tǒng)做重構(gòu)是件絕對謹小慎微的事情。為了完成在這么復(fù)雜體系下的架構(gòu)及代碼重構(gòu),我們必須有條不紊的分離關(guān)注點以及一如既往的堅持軟件卓越。

聚焦與收斂上游調(diào)用

 

如何避免新代碼變包袱?阿里通用方法來了

 

解耦下游依賴

 

如何避免新代碼變包袱?阿里通用方法來了

 

以服務(wù)為單位切換

 

如何避免新代碼變包袱?阿里通用方法來了

 

老系統(tǒng)下線

經(jīng)過一步一步的分解,legacy系統(tǒng)已經(jīng)完全被重構(gòu),并且具備隨時切換的準備。這里我給幾個建議:

  1. 先把老實現(xiàn)作為API的默認實現(xiàn),新的實現(xiàn)作為老的實現(xiàn)的降級實現(xiàn),并使用策略分流一部分流量(具體比例跟團隊信心相關(guān));
  2. 對于有業(yè)務(wù)需求變更的部分應(yīng)盡快實現(xiàn)在新的實現(xiàn)里,并將新實現(xiàn)作為API的默認實現(xiàn),老實現(xiàn)作為新實現(xiàn)的降級實現(xiàn),策略應(yīng)該是即時降級,也就是新實現(xiàn)出現(xiàn)問題立刻降級到老實現(xiàn);
  3. 運行一段時間沒有問題后,講所有默認實現(xiàn)切換為新實現(xiàn),并將老實現(xiàn)作為新實現(xiàn)的降級實現(xiàn);
  4. 其實這時就算所有切換完畢:老實現(xiàn)可以永遠作為新實現(xiàn)的降級實現(xiàn),也就是只要我升級一次服務(wù),上一次成功版本就可以作為這次的降級實現(xiàn),這樣,線上問題回滾就是秒級的。

總結(jié)

本文基于借助NBF提供的遠程多態(tài),服務(wù)編排等能力下基礎(chǔ)資料,商品,組網(wǎng)等系統(tǒng)新建,重構(gòu)的經(jīng)驗及方法論總結(jié)。僅供遇到架構(gòu)重構(gòu),解耦等問題困擾的技術(shù)團隊參考。

本文作者:輝子

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2019-09-30 10:46:46

代碼架構(gòu)Architect

2023-02-05 13:06:07

ChatGPT看圖方法

2022-04-01 08:02:44

云成本服務(wù)器互聯(lián)網(wǎng)

2017-03-02 13:43:02

RPython文本挖掘

2023-09-11 13:12:54

模型數(shù)據(jù)

2009-03-09 17:25:34

2021-11-09 21:22:24

微軟Windows 11Windows

2024-03-25 12:40:19

訓(xùn)練模型

2011-12-26 15:51:36

用戶訪問訪問管理

2016-04-08 09:24:01

脆弱代碼更新

2024-07-16 15:48:45

蘋果iPhone果粉

2024-05-22 16:01:32

2023-02-22 14:47:24

模型AI

2020-01-03 08:34:18

pandas代碼開發(fā)

2023-04-06 09:41:00

React 組件重渲染

2014-11-21 09:17:14

2023-10-20 12:53:00

模型訓(xùn)練

2021-05-14 14:28:15

LinuxChrome瀏覽器

2021-11-05 08:28:27

內(nèi)存泄漏調(diào)試

2009-05-27 11:30:20

C#Visual Stud協(xié)變
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 日韩网站免费观看 | www.五月天婷婷.com | 亚洲精品在线视频 | 午夜综合 | 精国产品一区二区三区四季综 | 日韩在线视频观看 | 精品国产一区二区三区久久狼黑人 | 欧美精品1区2区 | 精品欧美一区二区久久久伦 | 超碰婷婷| 中文字幕在线观看一区二区 | 91精品国产一区二区三区 | 在线观看视频中文字幕 | 91av视频在线观看 | 天堂视频中文在线 | 精品欧美一区二区中文字幕视频 | 成人在线视频一区 | 91中文字幕在线 | 综合久| 国产极品91 | 亚洲免费三级 | 99re国产 | 91精品国产高清一区二区三区 | 在线中文一区 | 精品国产乱码久久久久久影片 | 美女黄网 | 高清久久久 | 热99精品视频 | 男女啪啪高潮无遮挡免费动态 | 国产精品爱久久久久久久 | 中文字幕一区在线观看视频 | 91精品国产乱码麻豆白嫩 | 成人精品一区二区三区 | 国产精品不卡一区 | 91在线观 | 亚洲午夜小视频 | 亚洲日本三级 | 亚洲一区二区三区免费在线观看 | 精品视频一区二区三区在线观看 | 特级生活片 | 99久久精品一区二区毛片吞精 |