每日一得

          不求多得,只求一得 about java,hibernate,spring,design,database,Ror,ruby,快速開發(fā)
          最近關(guān)心的內(nèi)容:SSH,seam,flex,敏捷,TDD
          本站的官方站點是:顛覆軟件

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            220 隨筆 :: 9 文章 :: 421 評論 :: 0 Trackbacks

          這一段時間,參加了部門組織的 RUP 教學(xué)項目,由一位“外援”架構(gòu)師為我們指導(dǎo)教練。最近一直在忙于業(yè)務(wù)建模,今天剛剛將自己負(fù)責(zé)部分的系統(tǒng)用例識別了一遍。其間一直有一個問題,纏繞著包括我在內(nèi)的很多同事,那就是用例之間的關(guān)系——包含、擴展、泛化——到底該如何使用。

          ??? 翻閱了同事去年參加 RUP 培訓(xùn)時帶來的材料,終于能基本分清三者之間的關(guān)系。

          ?

          用例是從系統(tǒng)外部可見的行為,是系統(tǒng)為某一個或幾個參與者( Actor )提供的一段完整的服務(wù)。從原則上來講,用例之間都是獨立、并列的,它們之間并不存在著包含從屬關(guān)系。但是為了體現(xiàn)一些用例之間的業(yè)務(wù)關(guān)系,提高可維護性和一致性,用例之間可以抽象出包含 (include) 、擴展 (extend) 和泛化 (generalization) 這幾種關(guān)系。

          在分開介紹它們之前,先說下它們的共性:都是從現(xiàn)有的用例中抽取出公共的那部分信息,作為一個單獨的用例,然后通后過不同的方法來重用這個公共的用例,以減少模型維護的工作量。

          ?

          1 、包含 (include)

            包含關(guān)系:使用包含 Inclusion 用例來封裝一組跨越多個用例的相似動作(行為片斷),以便多個基( Base )用例復(fù)用。基用例控制與包含用例的關(guān)系,以及被包含用例的事件流是否會插入到基用例的事件流中。基用例可以依賴包含用例執(zhí)行的結(jié)果,但是雙方都不能訪問對方的屬性。


          ?

          包 含關(guān)系對典型的應(yīng)用就是復(fù)用,也就是定義中說的情景。但是有時當(dāng)某用例的事件流過于復(fù)雜時,為了簡化用例的描述,我們也可以把某一段事件流抽象成為一個被 包含的用例;相反,用例劃分太細(xì)時,也可以抽象出一個基用例,來包含這些細(xì)顆粒的用例。這種情況類似于在過程設(shè)計語言中,將程序的某一段算法封裝成一個子 過程,然后再從主程序中調(diào)用這一子過程。 

          ??? 例如:業(yè)務(wù)中,總是存在著維護某某信息的功能,如果將它作為一個用例,那新建、編輯以及修改都要在用例詳述中描述,過于復(fù)雜;如果分成新建用例、編輯用例和刪除用例,則劃分太細(xì)。這時包含關(guān)系可以用來理清關(guān)系。

          ?

           

          ?

          2 擴展 (extend)

          擴展關(guān)系:將基用例中一段相對獨立并且可選的動作,用擴展( Extension )用例加以封裝,再讓它從基用例中聲明的擴展點( Extension Point )上進(jìn)行擴展,從而使基用例行為更簡練和目標(biāo)更集中。

          擴展用例為基用例添加新的行為。擴展用例可以訪問基用例的屬性,因此它能根據(jù)基用例中擴展點的當(dāng)前狀態(tài)來判斷是否執(zhí)行自己。但是擴展用例對基用例不可見。

          對于一個擴展用例,可以在基用例上有幾個擴展點。

          ?

          例如,系統(tǒng)中允許用戶對查詢的結(jié)果進(jìn)行導(dǎo)出、打印。對于查詢而言,能不能導(dǎo)出、打印查詢都是一樣的,導(dǎo)出、打印是不可見的。導(dǎo)入、打印和查詢相對獨立,而且為查詢添加了新行為。因此可以采用擴展關(guān)系來描述:

          ?

          ?

          用例詳述里面大致可以這樣來寫:

          執(zhí)行查詢

          ? 基本流:

          1. 員工選擇查詢功能

          ??? ??? 員工期望查詢業(yè)務(wù)數(shù)據(jù)時,選擇查詢鏈接,從而啟動本用例的執(zhí)行。

          2. 系統(tǒng)轉(zhuǎn)入查詢頁面,并顯示備選的查詢選項

          ??? ???

          3. 員工填寫查詢條件并提交

          ??? ??? ??? ???

          4. 系統(tǒng)驗證查詢條件的合法性

          ??? ??? ??? ??? 驗證條件的格式以及簡單邏輯,如大小、前后、范圍

          5. 系統(tǒng)將符合條件的信息返回

          ??? ??? 系統(tǒng)將查詢結(jié)果以分頁列表的形式顯示在頁面上

          6. 員工退出查詢功能

          ??? ??? 員工點擊退出鏈接,返回到上一級頁面

          ??? 擴展點:導(dǎo)出、打印擴展點定義在步驟 5

          ?

          導(dǎo)出

          ??? 該用例是在“導(dǎo)出、打印”擴展點上擴展了執(zhí)行查詢用例

          ??? 基本流:

          ??? ??? 1 .如果員工要求導(dǎo)出,選擇導(dǎo)出按鈕

          ??? ??? 。。。。。。

          ?

          由上例可以看出 : 擴展用例的事件流往往可以也可抽象為基用例的備選流。但是在基用例本身已經(jīng)是一個很復(fù)雜的情況下,選用擴展關(guān)系將備選流抽象成為單獨的用例可以使基用例行為更簡練和目標(biāo)更集中(當(dāng)然上面的例子中基用例可能簡單了些)。

          ?

          ?

          4 泛化 (generalization)

          泛化關(guān)系:子用例和父用例相似,但表現(xiàn)出更特別的行為;子用例將繼承父用例的所有結(jié)構(gòu)、行為和關(guān)系。子用例可以使用父用例的一段行為,也可以重載它。父用例通常是抽象的。在實際應(yīng)用中很少使用泛化關(guān)系,子用例中的特殊行為都可以作為父用例中的備選流存在。

          ?

          例如,業(yè)務(wù)中可能存在許多需要部門領(lǐng)導(dǎo)審批的事情,但是領(lǐng)導(dǎo)審批的流程是很相似的,這時可以做成泛化關(guān)系表示:

          ?

          用例詳述里面大致可以這樣來寫:

          審批

          ? 基本流:

          7. 領(lǐng)導(dǎo)選擇要審批的記錄

          ??? ??? 領(lǐng)導(dǎo)期望審批記錄時,選擇待審批記錄鏈接,從而啟動本用例的執(zhí)行。

          8. 系統(tǒng)轉(zhuǎn)入審批頁面,并顯示記錄的詳細(xì)信息

          ??? ???

          9. 領(lǐng)導(dǎo)填寫審批意見

          ??? ??? ??? ??? 領(lǐng)導(dǎo)根據(jù)記錄的合理性來填寫個人審批意見

          10. ???????????? 提交審批結(jié)果

          ??? ???

          ?

          工資調(diào)整審批

          ??? 該用例是審批用例的子用例

          ??? 基本流:

          ??? ??? 1 .領(lǐng)導(dǎo)選擇要審批的記錄

          ?

          2. 系統(tǒng)轉(zhuǎn)入審批頁面,并顯示記錄的詳細(xì)信息

          ?

          3. 領(lǐng)導(dǎo)填寫審批意見

          ?

          4. 提交審批結(jié)果

          ??? ??? ??? ??? 如果調(diào)整幅度較大,則要提交上級審批

          ?

          ?

          上面分析了用例之間的三種關(guān)系。其中最容易讓人迷惑的就是包含關(guān)系和擴展關(guān)系得區(qū)別。如果你現(xiàn)在對兩者還有迷惑,請再仔細(xì)的對比一下上面兩者的描述:)。


          posted on 2006-08-29 22:23 Alex 閱讀(529) 評論(1)  編輯  收藏 所屬分類: 建模

          評論

          # re: [zt]RUP之用例間的關(guān)系 2008-01-25 10:51 Uranus
          你那個Include畫的有問題  回復(fù)  更多評論
            

          主站蜘蛛池模板: 仪征市| 高邑县| 集贤县| 云霄县| 徐闻县| 仁寿县| 托里县| 华阴市| 尖扎县| 尼木县| 沈丘县| 正阳县| 仙居县| 尤溪县| 石城县| 大理市| 丹巴县| 四子王旗| 文山县| 安远县| 绥宁县| 沙雅县| 余干县| 汨罗市| 宾阳县| 新竹县| 沙河市| 盐边县| 抚宁县| 神池县| 江西省| 衡东县| 武鸣县| 宁武县| 青铜峡市| 平罗县| 惠来县| 德阳市| 文成县| 阜南县| 休宁县|