2012年3月12日

7.2-PIM-2:分析企業規則


給SA的UML/MDA實務手冊
----------
第7章-分析企業規則



7.2  PIM-2:分析企業規則
企業規則散落四處;系統分析師可以透過不同的UML圖,重新組織且呈現企業規則,如下:
n   PIM-1的系統UC敘述,以系統流程為主,記錄限制流程的企業規則。
n   PIM-2的狀態圖,以物件行為為主,記錄刺激物件反應的企業規則。
n   PIM-3的類別圖,以靜態結構為主,記錄限制物件種類或結合關係的企業規則。

在進行PIM-1時,系統分析師已經廣泛地記下些重要的企業規則了。接著,系統分析師可以從中找出涉及多項企業規則的企業物件(Business Object),並於此處的PIM-2,再進一步透過狀態圖,組織且記錄更多重要的企業規則。
        同時,系統分析師經過了建立狀態圖的思考過程之後,可以對重要企業物件的狀態變化更加清楚。系統分析師可以用一張狀態圖呈現某一種重要物件一生的行為。從物件誕生到滅亡期間,它會對哪些事件(Event)有所反應,因而轉換(Transition)其內在狀態(State),而且執行某些特定的行動(Action)
針對物件一生中可能執行的一組行動,系統分析師使用狀態來分組這些行動。因此,物件一旦轉換進入某一個狀態之後,其可執行的行動就會被限制,直到發生了重要事件之後,物件才會轉換到另一個狀態,同時也執行新狀態內部規定好的行動。
現在,我們來看圖7-4的狀態圖片段;這是狀態圖最簡單的模樣。狀態圖內有一堆狀態,事件發生時,狀態會遵照轉換線的箭頭方向,轉換到另一個狀態,並且執行狀態內部指定的行動。在基金模擬個案中,定期定額申購交易物件原處於「正常扣款」狀態,當接收到「停止約定」事件時,物件會離開「正常扣款」狀態轉換到「終止扣款」狀態,並且執行「關閉定期定額交易」這項行動。

7-4:  事件刺激造成狀態轉換

        物件有兩種執行行動的方式。一種情況是,物件進入狀態之後,執行狀態內部指定的行動,如圖7-5的「扣款」行動。另一種情況是,物件在轉換狀態的瞬間,執行一項不可中斷的行動,如圖7-5的「累計失敗次數」行動。轉換瞬間執行的行動,標示在斜線(/)之後;如果因事件而轉換執行的話,事件標示在斜線前,如「扣款失敗/累計失敗次數」的表示法。


7-5:  行動

        轉換行動通常執行時間短暫,有不可中斷的特質;而狀態行動則執行時間較長,而且可能因事件中斷執行,轉換到另一個狀態。系統分析師如果想更明確地指稱兩者,可用「行動」(Action)表不可中斷的動作,以「活動」(Activity)表可中斷的動作。所以,轉換線上的動作稱為行動,而狀態內部的do動作則稱為「do活動」。
有些過度謹慎的系統分析師可能會困惑,某些動作到底是放置於轉換線上好,還是放置於狀態內部佳。除了轉換行動與狀態活動的可否中斷特性之外,似乎沒有更好的區分,更何況,雖說狀態活動可被中斷,也不意味著不可中斷的行動不能放置於狀態內,所以這項特性似乎無助於解決系統分析師的困惑。
這樣的困惑或許只是我的多慮,每個系統分析師都有自己的思維和設計風格。不過,有一種情況我會明確地採用轉換行動。當動作的結果會決定轉換線時,我會明確地採用轉換行動。
請看圖7-5的例子;扣款失敗的事件發生且引發轉換瞬間,物件會執行「累計失敗次數」行動。而累計失敗次數的結果會影響物件選擇下一條轉換線,進入不同的狀態。在基金模擬個案中,定期定額申購物件每月執行一次定期定額自動扣款,一旦連續3次扣款失敗的話,物件會進入終止扣款狀態,並執行「關閉定期定額交易」活動。
轉換線可以置於一般狀態之間,也可以置於一般狀態和選擇狀態(Choice Pseudostate)之間,如圖7-6所示。物件轉換進選擇狀態後,沒有任何指定的活動需要執行,它僅需做一項多擇一的選擇,從多條設置了警戒條件(Guard)的轉換線中,擇一轉換至另一個狀態。


7-6:  轉換行動與選擇

狀態內部也不是只能設置do活動,另外還可以設置其他種類的動作,如「進入行動」(Entry Action)和「離開行動」(Exit Action),如圖7-7所示。在基金模擬個案中,定期定額申購物件在進入終止扣款狀態後,會立即執行「設為終止扣款狀態」的進入行動。隨後,物件會繼續執行「關閉定期定額交易」的do活動,執行完所有的do活動之後,物件就停止了。靜待事件發生,物件才會在轉換離開「終止扣款狀態」之際,執行「電郵終止扣款通知」的離開行動。


7-7:  進入行動與離開行動

最後,我們來看物件狀態的起點(Initial Pseudostate)與終點(Final State),為了方便解釋起點與終點,所以簡化定期定額申購物件的狀態圖為圖7-8的模樣。
在基金模擬個案中,定期定額申購物件誕生之後,將立即從起點狀態進入到「正常扣款」狀態,約定日一到,就進入「自動申購」狀態執行「扣款」活動。一旦累計3次扣款失敗的事件發生,物件會轉換進入「終止扣款」狀態,執行「關閉定期定額交易」的活動,並於執行完畢之後,進入狀態終點。一旦物件進入終點之後,就完全停止了,不會再發生任何狀態轉換的情況了。


7-8:  起點與終點

沒有留言: