新接手一個業務系統,我是這麼熟悉的

来源:https://www.cnblogs.com/kdaddy/p/17977960
-Advertisement-
Play Games

在日常開發的過程中,我們會遇到各種各樣複雜的業務系統,老貓通過這五種方式,基本就可以對系統有個比較好的拿捏。 ...


故事

接二連三地背鍋讓小貓的內心受到了前所未有的打擊。這也是他職業生涯中的第一次。感興趣的伙伴們如果想瞭解一下小貓怎麼了,可以看一下“冪等事件”以及“緩存擊穿事件”。

這天組長找小貓來到了一間會議室。

“在這麼短的時間內發生了這麼多的事故,我想也你心裡也不好受,也不怪你,畢竟剛接手項目。以前項目中可能本身存在一定問題。正好輪到你頭上,我希望你也不要灰心......”,組長在一邊balabala。

小貓在一旁小雞啄米似的點著頭。緊張的內心緩和了許多,“聽組長這語氣,貌似不扣我績效啊”,小貓心裡尋思著。

“但是呢,事情是發生了,系統中估計還有其他的問題,無論是業務上的還是代碼上的亦或是設計上的,然後我希望你最近可以花時間整理一下,然後輸出一份項目文檔分析。等到下次月會的時候一起分享一下當前系統的情況。”

小貓連連點頭,心裡琢磨“看來還是躲不過當眾批鬥這關啊,罷了罷了,可是,這樣的一份文檔該從哪個口子開始呢,到底該怎麼寫呢”

此時的小貓內心又開始不安起來。

聊聊熟悉新項目

當接手到新的系統的時候,大家是如何進行熟悉的呢?其實老貓在上一篇“緩存擊穿事件”的文末就問過大家了,不曉得大家是怎麼處理的,歡迎大家留言。

接下來和大家聊一下老貓對一個新系統的熟悉過程。如果大家覺得有所幫助也可以借鑒一下。主要按照以下方法:

項目熟悉

嘗試畫一下用例圖

當接受到一個新的業務系統之後,首先咱們至少需要知道當前這個系統是乾什麼的,所以有時候就需要抽時間找到相關的產品經理瞭解一下業務,此時產品經理可能會和你聊一下現有的業務現狀和背景,但是有可能也會丟給你一份V0-Vn版本的產品需求方案。如果是後者記住千萬得忍住,不要用顯示器砸產品的臉,因為你們的合作尚未開始。咳咳,開個玩笑,言歸正傳。

我們先瞭解一下什麼是用例圖。

用例圖簡析

用例是系統中的一個功能單元,可以被描述為執行者與主體之間的一次交互行為。執行者是與系統、子系統或類發生交互作用的外部用戶、進程或其他系統的理想化角色。

用途:能夠列出系統中的用例和執行者,並顯示哪個執行者參與了哪個用例的執行。

針對之前小貓遇到的“下單付款的業務點”,咱們來畫個用例圖說明一下。如下圖:

用例

如上圖其實就是一個簡單的用例圖。我們需要搞清楚的是各種線條的含義。

  1. a線條表示的是關聯即執行者與其參與的用例之間的通信路徑。用實線表示。
  2. b線條表示包含,在基用例上插入附加的行為,並且顯式地描述了該插入。
  3. c線條表示擴展,在基用例上插入附加的行為,基用例並不知道。
  4. d線條表示用例泛化,一般用例和特殊用例之間地關係,其中特殊用例繼承了一般用例的特征並增加了新的特性。

這樣我們就可以很清晰地瞭解當前的業務現狀。

後端模型梳理

當梳理完當前的系統功能點以及業務形態的時候,我們就可以介入去看一下現有系統的模型了即DB資料庫的表。這樣我們就能知道當前設計的系統是如何對業務進行抽象的。
那麼在看相關表的時候,其實我們就可以慢慢地將ER圖進行繪製出來了。

什麼是ER圖

E-R圖即全稱實體-聯繫圖(Entity Relationship Diagram),它提供了表示實體類型、屬性和聯繫的方法,用來描述現實世界的概念模型。

通過其定義其實我們就知道了在ER圖裡面有三個比較重要的點,分別是實體類,屬性,聯繫。當我們在整理DB表的時候其實對應的就是我們的表、表欄位以及對應的表和表之間的關係。

看個例子,下麵老貓繪製一下一般商城系統底層的商品邏輯。

ER例子

解釋一下每一塊圖的含義:

  1. 方塊表示一個模型即一個表,當然這個也是ER圖中的實體類。
  2. 橢圓形表示實體類包含的屬性。
  3. 菱形就表示兩個類之間的動作行為關係,比如上圖中商品上架到貨架上。日常中老師給學生上課,那麼菱形中可能就是上課。
  4. 線條上的1和n就更清晰了,就是一對多,多對一,一對一的關係。

上圖中其實我們就可以比較清晰地看到,在當前的這個系統中存在三個比較重要的實體概念,分別是商品、商品池、以及貨架。從圖中我們也可以大概地看到他們之間的關係。

當咱們梳理完ER圖之後,其實上述的用例業務圖如何在現有系統中的抽象大概就清楚了。

聊到這裡,咱們從上帝視角去看一下,我們給當前這個系統賦予了骨架,接下來得讓它的開始心臟跳動,血液奔騰起來,讓整個系統賦予靈魂。
那麼接下來,我們就把模型通過流程的方式串起來。

核心流程以及狀態機流轉

咱們直接看一下例子,其實老貓覺得流程圖的梳理可能比較簡單,但是難的是如何去把控整個流程中的環節。如果在繪製的時候想的比較細緻,可能每一步的落庫環節都會去記錄。這樣的話對於業務的專註度就會少一些。如果畫粗了,模型的對應關係可能又把控不好。所以這個地方老貓覺得還是比較考驗程式員的概括能力以及業務的理解能力的。

流程圖

上述圖中,老貓簡單畫了一個流程圖,當然流程圖中可能會存在紕漏,大家不要太過較真,在此是說明這麼一個事情,咱們暫且不談裡面業務流程的準確度。
上面流程中我們看到有以下圖形內容:

  1. 起始節點,咱們用圓圈表示,當然可以選擇自己喜歡的顏色,沒有太多標準。
  2. 流程進行流轉的時候,我們用了相關的箭頭線表示,涉及到核心業務操作的時候就是方塊。
  3. 遇到分支節點的時候,咱們用菱形去做路由。
  4. 遇到一些非同步操作的時候,老貓喜歡用虛線去表示。

上述這種流程的表示其實是比較簡單的,我們不用去在意系統邊界。只管繪製即可。

但是現在的開發體系咱們往往都是微服務化的,那麼此時我們可能就要考慮到不同系統之間的交互流程。由此,咱們可能機會引入泳道的概念。見下圖。

泳道流程

上述圖中我們就可以看到各個系統應用之間的交互,每一個泳道就代表著其中的一個微服務系統。這是老貓日常熟悉業務中真實繪製的一張圖,再次強調一下大家要看的是繪圖的一些思路,不要太過糾結業務。

那麼再細節一點,比如討論到訂單狀態的一些流轉的時候,此時我們為了更好的把控,會使用一些狀態的流轉圖去梳理。

狀態流轉

上述主要是闡述整個狀態在流程中的流轉,當然很多時候狀態位比較簡單的時候,咱們也可以不用畫,可能當狀態比較複雜多樣的時候才會去考慮到畫狀態機。

到此,通過上面的幾個步驟的梳理,其實我們已經能夠對大部分的業務有個熟悉了。但是有的時候還不夠,涉及一些複雜介面交互請求時序的時候,可能還是會翻車弄不清楚,那麼此時咱們就要引入時序圖進行梳理。

引入時序圖

時序圖通常為表示多個對象之間消息交互的序列。
其中時序圖涉及:參與者、對象、生命線、激活、消息、片段。
當然消息中又包含:同步消息、非同步消息、自關聯消息、返回消息。

關於其中的解釋,如下圖例子。

時序圖

上述簡單繪製了下單扣減庫存的時序。

在上述圖中,老貓用到了其中的一種片段--抉擇,其實關於片段還有很多種類,大家繪製時序的時候可以對照著去使用。

片段

複雜代碼的類圖

完成上面這些梳理之後,這個老系統其實就已經被你搞定了,後續一些比較細節的地方,當然隨著業務功能地迭代再慢慢吃透。

類圖:是描述類、介面、協同以及他們之間關係的圖,用來顯示系統中這些概念的靜態結構,類圖主要由類、介面和各種關係組成。

如果老系統中存在一些屎山代碼或者極端優秀的代碼,你看不透裡面的繼承實現關係的,那麼可以去繪製一下類圖。這裡老貓不作展開,先賣個關子,後續等咱們梳理到設計模式相關知識點的時候,咱們再慢慢聊。

寫在最後

在日常開發的過程中,我們會遇到各種各樣複雜的系統,老貓通過上述手段,基本就可以做一個比較好的拿捏。希望能夠幫助到大家,大家如果還有其他比較好的辦法,也歡迎在評論區留言。

熱愛技術,熱愛產品,熱愛生活,一個懂技術,懂產品,懂生活的程式員~ 更多精彩內容,可以關註公眾號“程式員老貓”。 個人博客:https://blog.ktdaddy.com/
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ELK的架構有多種,本篇分享使用的架構如圖所示: Beats(Filebeat) -> -> Elasticsearch -> Kibana,目前生產環境一天幾千萬的日誌,記憶體占用大概 10G ...
  • 本文向大家介紹了最小二乘法以及公式推導的過程,並使用C#與Python進行實現。重點介紹了C#中是如何實現的,同時介紹了在C#中如何使用OxyPlot繪圖。希望對你有所幫助。 ...
  • 在 .NET 中,字元串是不可變的,這意味著一旦創建,字元串的內容就不能被修改。字元串在記憶體中以不同的方式存儲,具體取決於它是常量字元串還是動態創建的字元串。 常量字元串 常量字元串在編譯時就被解析,併在程式的元數據(Metadata)中存儲。多個相同的字元串常量可能會共用同一塊記憶體。 string ...
  • 字元串用於存儲文本。一個字元串變數包含由雙引號括起的字元集合 示例: // 創建一個string類型的變數並賦予一個值 string greeting = "Hello"; 如果需要,一個字元串變數可以包含多個單詞: 示例: string greeting2 = "Nice to meet you! ...
  • 提示:文章寫完後,目錄可以自動生成,如何生成可參考右邊的幫助文檔 @目錄前言一、docker是什麼?二、docker compose是什麼?三、安裝步驟1.Ubuntu安裝腳本2.生成腳本3.啟動和驗證四、卸載步驟1.Ubuntu卸載腳本2.保存文件後設置執行許可權3.運行文件4.驗證是否刪除成功Ce ...
  • Linux內核定義 Linux內核是Linux操作系統的核心部分,它是一個類Unix的操作系統內核,提供了必要的服務並管理系統資源。內核充當硬體和軟體層之間的介面,使操作系統能夠與底層硬體 組件進行通信和控制。以下是Linux內核的一些重要功能: 進程管理:內核管理進程的執行,分配CPU時間、記憶體和 ...
  • 鋼鐵知識庫,一個學習python爬蟲、數據分析的知識庫。人生苦短,快用python。 xshell是什麼 通俗點說就是一款強大ssh遠程軟體,可以方便運維人員對伺服器進行管理操作,功能很多朋友們自行探索,今天只聊其中一個功能點那就是隧道轉發。 隧道轉移是什麼 xshell隧道轉移到底是幹嘛的,有什麼 ...
  • ​ 1、概念 mvcc作用在於解決併發條件下,讀寫衝突的問題。一般用於RC和RR隔離級別,解決臟讀和不可重覆讀的問題。 (1)當前讀 讀取的是記錄的最新版本,讀取時還要保證其他事務不能修改當前記錄,會對讀取的記錄進行加鎖。對於我們日常的操作,如:select ... lock in share mo ...
一周排行
    -Advertisement-
    Play Games
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...