我正在使用UML狀態圖建模一個進程。下面是一些僞代碼,確定當前狀態:如何使用狀態圖模擬此過程?
function getAccountState(customer) {
if (authorizationRequired(customer)) {
return State.AUTHORIZATION_REQUIRED
}
if (updateRequired(customer)) {
return State.UPDATE_REQUIRED
}
return State.DRAFT
}
不過,我認爲這是有些奇怪,每個過渡包含兩次。這個順序很重要,但是這意味着,授權檢查應該始終在第一位。
如何將這一過程中的一個模式?
編輯:
這個過程背後的背景是一個REST服務。該帳戶被建模爲一個資源,可以通過各種狀態。任何時候請求資源時,服務都按上述僞代碼所描述的順序執行檢查,以生成相應的表示。根據不同的答案,它包括兩種:
- 鏈接到授權帳戶如果帳戶需要授權
- 一個鏈接,如果需要更新,以更新的姿態(然而,這可能只有一次的帳戶是發生授權或沒有被授權)
- 的鏈接完成帳戶概況是否跟上時代的(可能是因爲它不得不進行更新,並通過客戶端更新,或者從來沒有在被更新第1名)
上面的代碼只是一個examp儘管如此。該服務還可以利用存儲「狀態」的數據庫字段,雖然這是一種反模式不是?通過對存儲的數據應用業務規則而不是(冗餘地)將狀態存儲在單獨的字段中來「派生」當前狀態是更加可行的。這就是僞代碼應該表明的內容。
你的代碼並不代表一個狀態機。目前尚不清楚auth-needed/upd.-req如何。操作影響整個系統。你也不能從一開始就轉移兩次。這將採取未確定/隨機路徑, –
代碼應該表示「活動」狀態的規則。例如。創建帳戶時,該方法會被調用並可能會返回該帳戶需要授權才能繼續。在此操作(例如授權)之後,該方法會再次被調用,並且可能會返回需要更新配置文件的情況。如果沒有,該帳戶處於草稿狀態。代碼只能代表這個邏輯,這個代碼在某些系統中並不存在。我只是想說明規則。 –
是的,我知道。但它只是返回操作返回的條件。這根本不是一臺狀態機。這只是一個簡單的操作,返回一個條件值,意外命名爲「狀態」。 –