控制類

控制類

在系統分析階段將分析類分為三種類型:實體類、界面類、控制類。控制類用於描述一個用例所具有的事件流控制行為,控制一個用例中的事件順序。

基本信息

控制類

控制類用於對一個或幾個用例所特有的控制行為進行建模。控制對象(控制類的實例)通常控制其他對象,因此它們的行為具有協調性質。控制類將用例的特有行為進行封裝。

控制對象的行為與特定用例的實現密切相關。在很多場景下,您甚至可以說是控制對象“掌握”著用例的實現。但是,如果用例任務之間聯繫很緊密,有些控制對象就能參與多個用例實現。此外,不同控制類的多個控制對象可以參與同一個用例。不是所有用例都需要控制對象。例如,如果某個用例的事件流與一個實體對象相關,那么邊界對象就可能在該實體對象的協助下實現這個用例。您可以首先為每個用例實現確定一個控制類,接著,在確定了更多的用例實現並發現更多的共性後,再對其進行改進。

因為控制類能夠表示系統的動態行為,處理主要的任務和控制流,所以它們可以幫助理解系統。

當系統執行用例的時候,就產生了一個控制對象。控制對象經常在其對套用例執行完畢後消亡。

注意:控制類並不能處理用例需要執行的一切事務。相反,它協調其他用來實施此功能的對象的活動。控制類將工作委派給已被指定負責此項功能的對象。

查找控制類

控制類用於在系統中協調行為。系統可以在沒有控制對象的情況下執行某些用例(僅使用實體對象和邊界對象),尤其是那些只需對已存儲信息進行簡單處理的用例。

較複雜的用例一般都需要一個或多個控制類來協調系統中其他對象的行為。控制對象的示例有:事務管理器、資源協調器和錯誤處理器。

控制類有效地將邊界對象與實體對象分開,讓系統更能適應其邊界內發生的變更。這些控制類還將用例所特有的行為與實體對象分開,使實體對象在用例和系統中具有更高的復用性。

控制類所提供的行為具有以下特點:

· 獨立於環境(不隨環境的變更而變更)。

· 確定用例中的控制邏輯(事件順序)和事務。

· 在實體類的內部結構或行為發生變更的情況下,幾乎不會變更。

· 使用或規定若干實體類的內容,因此需要協調這些實體類的行為。

· 不是每次被激活後都以同樣的方式執行(事件流具有多種狀態)。

確定是否需要控制類

其他信息

用例的事件流決定了不同任務的執行順序。首先,調查事件流是否能由已確定的邊界類和實體類進行處理。對於主要是為了輸入、檢索、顯示或修改信息的簡單事件流來說,通常不必單獨使用一個控制類,將由邊界類負責協調用例。

如果事件流較複雜,而且包含一些可能會獨立於接口(邊界類)或系統信息庫(實體類)而變更的動態行為,則應該將該事件流封裝在一個單獨的控制類中。通過封裝事件流,同一個控制類就可能由具有不同接口和信息庫(或者至少基礎數據結構不同)的各種系統重複使用。

示例:管理任務佇列

您可從庫房管理系統的執行任務用例中確定一個控制類。該控制類處理一個任務佇列,保證任務按照正確的順序來執行。一旦分配好運輸工具後,它就執行佇列中的下一個任務。因此,系統可以同時執行多個任務。

如果將由其對應的控制對象定義的行為分為兩個控制類(Task Performer 和 Queue Handler),那么說明此行為就會更加容易。Queue Handler 對象將只處理佇列順序和對運輸工具的分配。整個佇列只需一個 Queue Handler 對象。一旦系統要執行某個任務,它就會產生一個新的 Task Performer 對象來執行該任務。所以,系統所執行的每個任務都需要一個 Task Performer 對象。

複雜的類應按照類似職責進行劃分

這種劃分的主要好處在於:我們將佇列處理職責(許多用例中都有的職責)從任務管理的特有活動(該用例所特有)中分離出來。這使得理解類更加容易,而且更易於隨著設計的成熟而進行修改。這還有益於保持系統的負載平衡,因為只要有處理負載的需要,就可以創建足夠的 Task Performer 來處理工作量。

將主事件流和備選/異常事件流分別封裝在不同的控制類中 為了簡化變更,將主事件流和備選事件流封裝於不同的控制類中。如果備選事件流和異常事件流完全獨立,那么將它們也分開。這會方便系統以後的擴展和維護。

如果兩個主角共享同一個控制類,則應劃分控制類 如果多個主角使用同一個控制類,那么可能也需要劃分控制類。通過這種方法,我們將一個主角需求的變更與系統的其他部分隔離開。如果變更成本很高,或後果非常嚴重,您就應該找出所有與多個主角相關的控制類,並對它們進行劃分。理想情況下,每個控制類應該最多只與一個主角進行互動(通過一些邊界對象)。

示例:電話通話管理

以用例市內電話為例。我們首先確定一個控制類來管理通話。

用來控制電話系統中市內電話的控制類可以很快地分為兩個控制類:A 行為和 B 行為,分別對應於各自的主角。

在市內通話中,有兩個主角:撥打電話的 A 用戶和接聽電話的 B 用戶。A 用戶拿起話筒,聽到撥號音,然後撥打電話號碼。系統立即存儲號碼並進行分析。系統接收到號碼的所有數字後,將振鈴音發往 A 用戶,同時向 B 用戶發出振鈴信號。B 用戶拿起話筒後,振鈴音和振鈴信號都停止,而這兩個用戶間的通話就可以開始了。通話直到這兩個用戶都掛機時停止。

有兩種行為必須加以控制:A 用戶端行為和 B 用戶端行為。出於這個原因,初始控制對象被分為兩個控制對象:A 行為和 B 行為。

如果符合以下情況,您就不必劃分控制類:

· 您有理由確信,與控制類對象有關的主角的行為絕不會變更或者變更微乎其微。

· 控制類中某個對象對一個主角的行為與它對另一個主角的行為相比根本是無關緊要的,單個對象就可包含所有行為。這種方式的行為組合對可更改性的影響可以忽略不計。

相關詞條

相關搜尋

熱門詞條

聯絡我們