.NET 雲原生架構師訓練營(對象過程建模)–學習筆記
- 2021 年 12 月 24 日
- 筆記
- 【008】.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]) 。