.NET 雲原生架構師訓練營(對象過程建模)–學習筆記

目錄

  • UML
  • OPM
  • OPM優化

UML

1997年發布UML標準

主要域 視圖 主要概念
結構 靜態視圖 類圖 類、關聯、泛化、依賴關係、實現、介面
用例視圖 用例圖 用例、參與者、關聯、擴展、包括、用例泛化
實現視圖 構件圖 構件、介面、依賴關係、實現
部署視圖 部署圖 節點、構件、依賴關係、位置
動態 狀態機視圖 狀態機圖 狀態、事件、轉換、動作
活動視圖 活動圖 狀態、活動、完成轉換、分叉、結合
交互圖 順序圖 交互、對象、消息、激活
協作圖 協作、交互、協作角色、消息

UML 用例建模

圖中有多個用例,每個用例有一個參與者,以及一個用例名稱

用例是一個站在使用者的角度,他會在這個系統上做什麼事情,這個事情可以稱為一個用例

用戶通過這個系統做成了一件事情,這是以目標為導向的,比如用戶通過ATM機取錢,那麼取錢就稱為一個用例

用例更多的是涉及到用戶和系統之間的交互

為了後期更加詳細的設計,需要將用例圖拆分為文檔

內容 描述
用例名稱 報名活動
用例編號
行為角色 訪客、會員
簡要說明 訪客只能查看、會員可報名
前置條件 用戶已經通過活動列表進入具體活動介紹頁面;用戶已經登錄
後置條件 報名按鈕顯示為:已報名
流程圖

UML 會使用多種圖來展示用例內部詳細的過程,但是沒辦法進行層次縮放,這是使用 UML 做系統設計會存在的問題

OPM

Object Process Methodology

  • 系統視角
  • 概念建模
  • 系統分解

系統視角

任何系統都可以從兩方面來看

  • 結構(靜態)
  • 行為(動態)

概念建模

在對象和對象之間建立抽象的關係

過程影響對象

系統分解

  • 從對象和功能開始建模
  • 對象的狀態
  • 用過程鏈接聯繫對象

從對象和功能開始建模

對象是存在或可能存在的事物

過程是變換對象的事物

對象或過程都是一個事物

舉一個導購分享的例子,首先導購生成分享鏈接會產生一條分享鏈接,這就是我們所說的對象

接著點擊分享鏈接,分享鏈接作為這個過程的輸入,點擊鏈接會創建分享關係

抽取對象的過程中需要注意正方形填的是名詞,是一個對象;圓形填的是動詞,是一個過程

過程一定會影響對象,使得對象的狀態發生一些改變,或者包括創建和銷毀這個對象,同樣的,一個對象會作為另外一個過程的輸入

對象的狀態

一段時間內對象可能處於一種狀態或者情形

狀態使用圓角矩形,分享鏈接有兩種狀態,有效的和無效的,通過狀態與過程進行交互,只有鏈接是有效的才可以點擊,如果是無效的需要重新生成

這個時候我們需要多一個請求分享鏈接的過程,這個過程與生成分享鏈接的過程是不可以連接的

過程與過程之間不可以連接,連接只能發生在一個對象與一個過程之間,所以這個圖可能畫錯了,我們需要調整如下

狀態的檢查應該放到點擊鏈接的時候,鏈接如果是有效的,才會生成分享關係

鏈接狀態是分享鏈接的一個屬性,通過屬性連接(兩個三角形中間實心的圖標)

請求分享鏈接的時候一定有一個導購的對象,分享鏈接屬於導購的一個屬性

分享鏈接的狀態分為已生成和未生成,請求分享鏈接如果未生成,則需要生成分享鏈接,雙向的

用過程鏈接聯繫對象

  • 過程鏈接
  • 結構鏈接
  • 事件鏈接
  • 行為控制

過程鏈接:將一個對象(或其狀態)與一個過程聯繫起來,比如分享鏈接與請求分享鏈接的聯繫

結構鏈接:將一個對象與另一個對象(或者一個過程與另一個過程聯繫起來),比如請求分享鏈接與點擊鏈接的聯繫

過程鏈接

主體鏈接:系統的參與者,用戶主導了整個過程,比如導購和請求分享鏈接的聯繫,客戶和點擊鏈接的聯繫

手段(支援)鏈接:提供手段和支援,比如鏈接提供器和生成鏈接的聯繫

兩者的區別是一類是主體對象,一類是支援對象

變換鏈接:過程就是用來改變對象的狀態,影響一個對象的狀態或者吸收一個對象,比如分享鏈接和生成鏈接的聯繫

過程鏈接只能建立再對象和過程上

結構鏈接

結構鏈接是建立在對象與對象之間,過程與過程之間,它們之間往往擁有一種持久的關係,屬性、繼承、組成等等

  • 結構關係
  • 組成關係

屬性:分享鏈接是導購的屬性,鏈接狀態是分享鏈接的屬性,通過屬性連接建立聯繫

繼承:零售客戶和分銷商客戶繼承客戶,瀏覽器點擊和APP點擊繼承點擊鏈接

事件鏈接

在結構/過程鏈接之上添加 e 標註,代表是偶發的

Server 支援請求響應這件事情是偶發的,並不是一直有的,所以可以加上e標註

行為控制
  • 布爾對象
  • 條件 if
  • 或(OR)/ 與(XOR)

布爾對象:建立在支援對象之上,但是會有一個判斷,比如我們獲取鏈接的時候會有一個判斷,如果沒有鏈接則生成鏈接,有鏈接則返回

條件 if:和事件鏈接相似,比如在鏈接狀態有效的時候創建分享關係,添加 c 標註,無效的時候異常退出

或(OR)/ 與(XOR):或表示走一個或者多個都可以,亦或表示只能走一個,比如在是否有鏈接的兩個選項中間加兩條弧線,表示只能選一個;如果是或則畫一條弧線

過程鏈接與結構鏈接集合

OPM優化

  • 抽象與細化
  • 過程與判定
  • 複雜度管理

抽象與細化

抽象與細節之間會有一個繼承關係,導購繼承用戶,分享鏈接抽象為推廣

員工,客戶也可以導購;展示二維碼也可以作為一種分享鏈接

過程與判定

很多時候沒辦法確定是一個對象還是一個過程,最簡單的方式就是根據是動詞還是名詞判斷,以及根據過程有沒有改變對象的狀態判斷

複雜度管理

  • 狀態顯示與狀態隱藏
  • 展開與摺疊(放大與縮小)
  • 埠摺疊

狀態顯示與狀態隱藏

人為的控制是否要顯示狀態,比如鏈接狀態

展開與摺疊(放大與縮小)

把圖畫的層次高一點則簡單易懂,畫的層次畢竟低一點則複雜一些,但是表現會更加清晰,可以對它們進行切割

如果把分享放大,則可以在裡面畫更加細節的過程,同時可以在獲取鏈接裡面再畫更加細節的過程

我們也可以在多張圖中進行縮放,比如獲取鏈接放到第二個圖中

埠摺疊

比如在是否有鏈接的條件 if 可以摺疊起來,直接在外部通過兩個埠有和無來和其他對象過程建立鏈接

作業

嘗試把自己之前那個系統架構圖裡面的過程進入展下,一直向下到不可分割的原子級別(可以到某個類級別)

課程鏈接

//appsqsyiqlk5791.h5.xiaoeknow.com/v1/course/video/v_5f39bdb8e4b01187873136cf?type=2

知識共享許可協議

本作品採用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議進行許可。

歡迎轉載、使用、重新發布,但務必保留文章署名 鄭子銘 (包含鏈接: //www.cnblogs.com/MingsonZheng/ ),不得用於商業目的,基於本文修改後的作品務必以相同的許可發布。

如有任何疑問,請與我聯繫 ([email protected]) 。