運用四色建模法進行領域分析

来源:https://www.cnblogs.com/sunyuliang/archive/2019/10/26/11741641.html
-Advertisement-
Play Games

領域建模有很多種方法,對於同樣的問題域使用不同的建模手段得到的模型可能也不盡相同。於是我經常聽到這樣一個問題:怎麼才能保證建模的正確性? 領域建模有很多種方法,對於同樣的問題域使用不同的建模手段得到的模型可能也不盡相同。於是我經常聽到這樣一個問題:怎麼才能保證建模的正確性? 這聽起來是個合理的質疑, ...


領域建模有很多種方法,對於同樣的問題域使用不同的建模手段得到的模型可能也不盡相同。於是我經常聽到這樣一個問題:怎麼才能保證建模的正確性?

這聽起來是個合理的質疑,但實際上卻不是那麼有道理。首先我們需要明白建模的目的是什麼?如果僅僅是為了描畫問題,那麼並沒有什麼對錯之分——僅僅是立場和角度的差別;而如果是為了企業業務系統而進行建模,那麼這個問題應該變為:如何保證模型能夠支撐企業的運營?

我想用下麵這個例子來簡要的回答一下這個問題。

在開始分析和建模之前,我們需要知道企業業務系統的目的是什麼;而企業業務系統的目的往往跟決策者或者管理的訴求相關。我們現在需要移情到一位管理者身上,看看他的訴求到底是什麼。

現在假想你是一家線上電子書店的 COO。突然有一天,有一位顧客向你投訴,說他訂購的書少了一本,並且價錢算錯了,他多給了錢。在你承諾理賠之前,你需要核對一下這位顧客說的是否屬實。那麼這個時候你需要知道什麼樣的信息才能做出準確的判斷呢?

簡單來說,你需要知道這位顧客訂購了那些書籍,付了多少錢以及書店到底為這個顧客遞送了那些書籍。不幸的是,由於科技不夠發達,你無法直接駕駛時間機器回到從前去親眼看看發生了那些事。但幸運的是,你並不需要這麼做,你只需要看看這位顧客的訂單,和網銀的支付記錄以及你們書店交給 EMS 的快遞單存根,就應該知道這些信息了。

你找到了訂單和 EMS 快遞存根。發現這位顧客是在三天前訂購的書,而你們在前天就已經將書郵寄出去了。併在訂單上看到這位顧客一共訂購了 7 本書,但是在 EMS 的快遞存根上,並沒有任何書籍的信息,只有地址,包裹號,郵費和重量什麼的信息。這時候你覺得應該去詢問一下配送部門,看看他們做了什麼。

在配送部門你根據包裹號查到了那個包裹的信息,果然裡面只有 6 本書。同時你在包裹部門發現了一張延期交貨單。上面說明由於缺貨,這位顧客另外一本書正在等待發貨。

那麼剩下的問題就是支付問題了,從網銀的記錄上看,客戶不含郵費一共支付了 132.5。訂單上顯示的價錢也是 132.5,顯然這位顧客並沒有多付錢。

為了保證準確,你重新從網站上選了這 7 本書,想看看是否也會是這個價錢。但你卻意外的發現,一共只需要 128.3。仔細辨認後,你發現有一本圖書現在是促銷。那麼現在的問題是,促銷到底是什麼時候開始的?

你到了市場部,市場部給了你一份近期促銷計劃。你發現那本書是昨天才開始促銷的,也就是說在那位顧客在下訂單的時候,促銷還沒有開始。

這個時候,你覺得應該給你的顧客打一個電話致歉,商討如何後續郵寄的問題,並向他說明促銷的事情。

你是否覺得這個 COO 當得有點累呢?這當然是虛構的。但是從這故事裡面我們看到什麼呢?

任何的業務事件都會以某種數據的形式留下足跡。我們對於事件的追溯可以通過對數據的追溯來完成。正如上面這個故事里,你無法回到從前去看看到底發生了什麼,但是卻可以在單據的基礎上,一定程度的還原當時事情發生的場景。當我們把這些數據的足跡按照時間順序排列起來,我們幾乎可以清晰的推測出這個在過往的一段時間內到底發生了那些事情。

運用四色建模法進行領域分析

那麼為什麼這些數據形成的鏈條能夠成幫助我們追溯業務的營運呢?

因為這些數據並不是隨便挑選的。如果我們回顧一下你作為 COO 檢查這個疏漏的過程,你首先選擇了訂單和 EMS 快遞存根,換句話說,如果訂單出現差錯,或者 EMS 快遞存根上說明你的確郵寄了 7 本書,那麼這個疏漏的責任並不在你。所以這兩個訂單實際上這個你這個企業法律責任的起點和終點。

當你確定這個疏漏的責任在你之後,你選擇審查一些流程執行的結果,比如包裹存根。從而驗證一些主要的業務流程執行的結果是否正確。換句話講,這些數據是支撐你運營體系的關鍵流程的執行結果。

運用四色建模法進行領域分析

正是由於這些數據是流程執行的結果,它們才使我們可以在不瞭解流程細節的前提下,對某些突發事件進行追述和分析。

除了上面那個極端的例子(投訴),對於任何一筆正常的經濟往來,我們都需要知道:

  1. 如果我付出一筆資金,那麼我的權益是什麼?
  2. 如果我收到一筆資金,那麼我的義務是什麼?

而這些問題都需要業務系統捕捉到相應的足跡才能夠回答。所以企業的業務系統主要的目的之一,就是記錄這些足跡,並將這些足跡形成一條有效的追溯鏈。

而作為業務分析師的你,則應該知道那些事件在運營上是需要追溯的,這些事件都留下了什麼足跡。

這些足跡通常都具有一個有意思的特性,即它們都是時標性對象(moment-interval)。發現這些時標性對象就是建模的起點。對於這些時標性對象稍加整理,我們就得到了整個領域模型的骨幹:

運用四色建模法進行領域分析

在得到骨幹之後,我們需要豐富這個模型,使它可以更好的描述業務概念。這時候,我們需要補充一些實體對象。通常實體對象有三類:人,地點, 物(party/place/thing)。

運用四色建模法進行領域分析

在這個基礎上,我們可以進一步抽象這些實體事如果參與到各種不同的流程中去的,這時候,我們就需要用到角色(role):

運用四色建模法進行領域分析

最後再把一些需要描述的信息放入描述對象(description)。

運用四色建模法進行領域分析

我們就得了應用四色建模方法(color modeling)建立的一套領域模型。

簡要回顧一下上面的過程,不難發現我們建模的次序和重點:

  1. 首先以滿足管理和運營的需要為前提,尋找需要追溯的事件。
  2. 根據這些需要追溯,尋找足跡以及相應的時標性對象。
  3. 尋找時標對象周圍的人/事/物
  4. 從中抽象角色
  5. 把一些信息用描述對象補足。

由於在第一步中,我們就將管理和運營目標做為建模的出發點。因此,整套模型實際上是圍繞這些“如何有效地追蹤這些目標”而建立的,這樣的模型可以保證模型支撐企業的運營。

附言

幾位同事幫我審校這篇文章的時候,有人問了一個很有意思的問題:為什麼你會以一個看上去像極端情況的例子來說明這個建模方法? 以我的經驗來看,對於業務系統有兩個東西是很重要的:可追溯性(traceability)和執行效率(efficiency)。這裡的可追溯性是指責任的可追溯性(traceability of liability),而通常都是在一些不太好的事情發生之後,才需要對責任進行追溯。所以想一個相對負面的例子更容易幫助我們找到建模所需要解決的問題。

另外還有位同事說,你的四色方法與 Peter Coad 的四色法並不完全相同。是的,我所介紹的並不是 Peter Coad 的四色法, 我不敢說是發展, 僅僅是對於 Peter Coad 四色的一種變化吧。

 

作者:徐昊  

閱讀數:226852011 年 11 月 7 日 00:00

原文地址:https://www.infoq.cn/article/xh-four-color-modeling/#3970668-tsina-1-2071-4940258fac58681d93622513463cbd0b


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近在腳本中通過WScript.Shell執行命令行,實現IE打開Chrome的功能。 JS代碼如下: 由於客戶環境中 Chrome是綠色版的,把Chrome.exe的絕對路徑放入到環境變數path後,在windows的CMD視窗中可以通過start chrome打開,但是在JS中運行如上代碼始終提 ...
  • 項目需求,用戶要能夠輸入和點擊外面的公式去插入到textaera中,試了好幾種方法,有的是在谷歌下好使,在ie下不好使,最後找到了下麵這個方法,目前在ie8以上都可以生效。直接上代碼 調用也相當的簡單 ...
  • AJAX的學習 AJAX的簡介 AJAX即“Asynchronous Javascript And XML”(非同步JavaScript和XML),是指一種創建互動式網頁應用的網頁開發技術。 AJAX = 非同步 JavaScript和XML(標準通用標記語言的子集)。 AJAX 是一種用於創建快速動態 ...
  • 開發過程中,我們經常會碰到這樣的需求:在柱狀圖上,點擊某條柱形,調用相應的方法或跳轉相應的界面 接下來就詳細介紹如何實現柱狀圖的點擊事件,其中maChart是繪圖對象 一、簡單的點擊事件 這樣就可以獲得每條柱形所對應的數據 若需要在每條柱形上添加額外的屬性,比如id等等,可以在series中,通過對 ...
  • 效果圖: ...
  • JS中有關引用對象的拷貝問題 問題描述:在開發過程中,拷貝一個對象數組給另一個數組的時候,改變新數組中對象的屬性值,原數組中的對象屬性值也跟著改變了。 例如新定義一個數組arr1,裡面有兩個對象,然後再新定義一個數組arr2,將arr1的值通過slice()方法拷貝給arr2,由於slice()方法 ...
  • 1、斷開原因 WebSocket斷開的原因有很多,最好在WebSocket斷開時,將錯誤列印出來。 錯誤狀態碼: WebSocket斷開時,會觸發CloseEvent, CloseEvent會在連接關閉時發送給使用 WebSockets 的客戶端. 它在 WebSocket 對象的 onclose ...
  • 待補充 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...