日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【转】【UML】使用Visual Studio 2010 Team System中的架构师工具(设计与建模)

發(fā)布時(shí)間:2023/12/13 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】【UML】使用Visual Studio 2010 Team System中的架构师工具(设计与建模) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Lab 1:?應(yīng)用程序建模

實(shí)驗(yàn)?zāi)繕?biāo)

這個(gè)實(shí)驗(yàn)的目的是展示如何在Visual Studio 2010旗艦版中進(jìn)行應(yīng)用程序建模。團(tuán)隊(duì)中的架構(gòu)師會通過建模確定應(yīng)用程序是否滿足客戶的需求。 你可以創(chuàng)建不同級別的詳細(xì)模型,并將它們彼此結(jié)合、測試然后發(fā)布到你的開發(fā)計(jì)劃里。

在這個(gè)實(shí)驗(yàn)中, 我們將重點(diǎn)放在如何創(chuàng)建一系列簡單的系統(tǒng)建模圖形上.

每個(gè)練習(xí)應(yīng)該在 30分鐘內(nèi)完成.

Exercise 1 –?理解用戶需求

繪制活動、類以及其他UML圖形能幫助架構(gòu)師清晰辨別客戶的習(xí)慣、業(yè)務(wù)規(guī)則以及其他需求,從而使設(shè)計(jì)與客戶需求保持一致。

微軟Visual Studio 2010旗艦版可以讓你繪制關(guān)于客戶的活動以及你的系統(tǒng)如何幫助客戶達(dá)到他們的預(yù)期,這樣有助于你理解用戶需求,并能夠與客戶進(jìn)行良好的溝通和討論。

需求模型可以幫助你:

l 專注于系統(tǒng)的外部行為,并與系統(tǒng)內(nèi)部設(shè)計(jì)分離。

l 使用比自然語言更少的更精準(zhǔn)的方法描述客戶以及投資者的需求。

l 定義一個(gè)可以由客戶、開發(fā)人員以及測試人員一致使用的術(shù)語詞匯。

l 減少需求中的差距和分歧。

l 降低針對需求變化的響應(yīng)所付出的工作量。

l 規(guī)劃哪些功能需要開發(fā)。

l 使用模型作為系統(tǒng)測試的基礎(chǔ),使其成為客戶需求與測試人員之間的紐帶。當(dāng)需求變更時(shí),這種紐帶可以幫助你迅速更新測試。這樣可以使系統(tǒng)盡快滿足新的需求。

如果你將重點(diǎn)放在每次迭代開始時(shí)與客戶的討論上,那么需求模型會給你提供很大的便利。而且你不能在完成設(shè)計(jì)之前編寫詳細(xì)代碼。部分應(yīng)用程序功能,即使它非常簡單,通常也是構(gòu)成與用戶討論時(shí)最敏感的需求基礎(chǔ)。模型可以有效地總結(jié)討論結(jié)果。

Task 1 –用戶需求建模——用例圖

創(chuàng)建用例圖來描述誰使用該系統(tǒng),以及他們?nèi)绾问褂谩S美龍D代表一個(gè)系統(tǒng)用戶的目標(biāo),以及他們執(zhí)行程序的流程。

這個(gè)任務(wù)中,客戶需要一個(gè)在線餐飲銷售系統(tǒng)。該系統(tǒng)必須允許客戶從菜單中選擇食品,而且必須提供銷售商更新食品品種的菜單。你可以使用以下步驟實(shí)現(xiàn)該用例圖:

1. 啟動?Microsoft Visual Studio 2010.

2. 選擇?文件->新建->項(xiàng)目,如下所示:.

?

Figure?1: 打開新建項(xiàng)目對話框

3. 在新建項(xiàng)目對話框中, 選擇項(xiàng)目類型下的建模項(xiàng)目,然后在右側(cè)項(xiàng)目模板中選擇建模項(xiàng)目.

修改項(xiàng)目名稱ModelingProjectDinnerNow. 保持默認(rèn)項(xiàng)目路徑.

Figure?2: 創(chuàng)建新建模項(xiàng)目

4. 單擊確定,應(yīng)用你的選擇,打開一個(gè)空的建模項(xiàng)目.

Figure?3: 空的建模項(xiàng)目

5. 在解決方案瀏覽器中右鍵單擊ModelingProjectDinnerNow項(xiàng)目根節(jié)點(diǎn),在彈出菜單中選擇添加->添加新項(xiàng)

Figure 4: 添加新項(xiàng)菜單

6. 在彈出的添加新項(xiàng)對話框中,選擇UML用例圖模板,并修改用例圖的名稱為UMLUseCaseDiagramDinnerNow.usecasediagram

Figure 5: 添加新項(xiàng)對話框

7. 單擊添加,此時(shí)會打開空白用例圖

Figure 6: 空白用例圖UMLUseCaseDiagramDinnerNow.usecasediagram

8. 根據(jù)案例用戶需求,從左側(cè)工具箱中的UML用例圖節(jié)點(diǎn)下拖拽兩個(gè)用例圖標(biāo)到右側(cè)設(shè)計(jì)界面。

Figure 7: 從工具箱中拖拽兩個(gè)用例圖標(biāo)

9. 點(diǎn)選用例圖標(biāo)的”UseCase1”文字部分,使其變?yōu)榭删庉嫚顟B(tài),然后將其內(nèi)容修改為Order a Meal

10. 重復(fù)步驟9的操作,將用例2的用例內(nèi)容修改為Update Menu

Figure 8: 用例定義修改后的效果

11. 根據(jù)案例用戶需求,從左側(cè)工具箱中的UML用例圖節(jié)點(diǎn)下拖拽兩個(gè)活動者圖標(biāo)到右側(cè)用例圖設(shè)計(jì)界面

Figure 9: 從工具箱中添加活動者

12. 點(diǎn)選用活動者圖標(biāo)的”Actor1”文字部分,使其變?yōu)榭删庉嫚顟B(tài),然后將其內(nèi)容修改為Customer

13. 重復(fù)步驟12的操作,將活動者2的定義修改為Restaurant

Figure 10: 定義活動者后的效果

14. 在工具箱中選中Association圖標(biāo),然后在設(shè)計(jì)界面中首先點(diǎn)選Customer圖標(biāo),并保持鼠標(biāo)按下,拖拽到Order a Meal用例上。

Figure 11: 選擇Association圖標(biāo)后的效果

Figure 12: 拖拽過程中的效果

Figure 13: 拖拽完成的效果

15. 按照步驟14的方法,為Restaurant活動者Update Menu用例建立聯(lián)系

Figure 14: 用例圖初步完成效果

16. 還可以生成更精確的用例圖。例如,訂餐只是購買活動的一個(gè)步驟。整個(gè)購買活動應(yīng)該還包含付款和交貨等。

17. 在工具箱中選擇子系統(tǒng)圖標(biāo),并將其拖拽到設(shè)計(jì)界面中,放置于前一步驟中完成的用例圖的下方

Figure 15: 添加子系統(tǒng)圖標(biāo)

18. 點(diǎn)選子系統(tǒng)圖標(biāo)中左上角的“SubSystem1”文字,使其可以編輯。將“SubSystem1”文本修改為“Dinner Now System”

Figure 16: 修改子系統(tǒng)名稱

19. 選中上面我們定義的兩個(gè)用例:Order a Meal、Update Menu。將其拖拽到子系統(tǒng)圖標(biāo)內(nèi),并調(diào)整相互位置。

Figure 17: 將用例拖拽到子系統(tǒng)內(nèi)

Figure 18: 目前為止完成的更精確的用例圖

20. 從工具箱中拖拽兩次用例圖標(biāo)子系統(tǒng)圖標(biāo)內(nèi),分別定義為Buy a MealPay for Meal

Figure 19: 添加子系統(tǒng)內(nèi)部用例后的效果

21. 由于訂餐和付款共同屬于購買行為的組成部分,所以O(shè)rder a Meal、Pay for Meal都包含在Buy a Meal中。需要在工具箱中選中包含圖標(biāo),分別在Buy a Meal??Order a Meal?;Buy a Meal?Pay for Meal之間建立包含關(guān)系。

Figure 20: 建立Buy a Meal包含關(guān)系后的效果

22. 由于Buy a Meal 作為客戶使用的總用例,所以這里刪除Customer活動者與Order a Meal用例的聯(lián)系建立Customer活動者與Buy a Meal用例的聯(lián)系。調(diào)整用例之間的位置。

Figure 21: 修改Customer活動者關(guān)系后的效果

23. 由于送餐并不屬于Dinner Now System的功能,可能會有專門的物流或快遞系統(tǒng)負(fù)責(zé),這里,將送餐定義在Dinner Now System系統(tǒng)的外部。Dinner Now System子系統(tǒng)圖標(biāo)外部添加一個(gè)新的用例,定義為Deliver Meal并指定它與Restaurant活動者之間的聯(lián)系

Figure 22: 添加送餐用例后的效果

24. 送餐用例雖不屬于Dinner Now System系統(tǒng)的功能,但是也是購買行為的組成部分,這里需要建立Buy a Meal用例與Deliver Meal用例之間的包含關(guān)系

Figure 23: 最終用例圖完成的效果

25. 到此用例圖設(shè)計(jì)完成,保存并關(guān)閉當(dāng)前設(shè)計(jì)界面。

你還可以定義哪些用例包含在你系統(tǒng)的開發(fā)范圍之內(nèi)。例如,我們案例中的Deliver Meal用例就不需要開發(fā)。這就幫助開發(fā)人員界定了他們的工作內(nèi)容。一般用例圖中的子系統(tǒng)圖標(biāo)用來代表系統(tǒng)或組成部份。

用例圖還可以幫助你的團(tuán)隊(duì)討論功能發(fā)布的連續(xù)性。如,你可以決定是否在最初的版本中包括付費(fèi)功能,或者可以不包含。如果系統(tǒng)中不包含付費(fèi)功能,那么也可以由客戶在餐廳直接支付,而不經(jīng)過系統(tǒng)。這樣,你就可能不在你的系統(tǒng)最初版本中包含付費(fèi)功能。

用例圖只是一個(gè)總體的描述,而要想得到更詳細(xì)的用例描述,你可以將你的用例圖中的每個(gè)用例都導(dǎo)航到一個(gè)用例文檔中。用詳細(xì)的用例文檔來描述用例。

Task 2 –?概念類圖

你可以使用UML 類圖來開發(fā)用于下列用途的概念模型:

l 客戶可以自己參與到系統(tǒng)的開發(fā)過程中

l 描述用戶的需求,例如,在描述用例、業(yè)務(wù)規(guī)則以及用戶使用習(xí)慣方面。

l 系統(tǒng)中的API或用戶界面的信息類型變更

l 描述系統(tǒng)或驗(yàn)收測試

出于這樣的目的,UML類圖的概念就被定義為概念類圖。

在一個(gè)概念類圖中,你只需要展示必要的需求描述,而不需要展示系統(tǒng)內(nèi)部的設(shè)計(jì)。概念模型中不應(yīng)該出現(xiàn)操作或接口。

你可以使用如下步驟定義概念模型:

1. 在解決方案瀏覽器中右鍵單擊ModelingProjectDinnerNow項(xiàng)目根節(jié)點(diǎn),在菜單中選擇添加->添加新項(xiàng)

Figure 24: 添加新項(xiàng)對話框中選擇UML類圖

2. 在添加新項(xiàng)對話框中選擇UML類圖模板,并定義名稱為UMLClassDiagramDinnerNow.classdiagram. 效果如上圖所示。

3. 點(diǎn)擊添加按鈕,打開空白UML類圖設(shè)計(jì)界面.

Figure 25: 空白UML類圖設(shè)計(jì)界面

4. 在Task 1中我們設(shè)計(jì)到了兩個(gè)對象:訂單、菜單。根據(jù)經(jīng)驗(yàn)我們知道,訂單和菜單分別都要有各自的小項(xiàng),即訂單小項(xiàng)、菜單小項(xiàng)。所以我們首先從工具箱中拖拽四個(gè)類圖標(biāo)到設(shè)計(jì)界面,分別定義為Menu、MenuItem、Order、OrderItem。

Figure 26: 建立四個(gè)對象

5. 由于菜單和菜單小項(xiàng)、訂單與訂單小項(xiàng)是1對多的包含關(guān)系,所以我們需要在Menu與MenuItem、Order與OrderItem之間建立“構(gòu)成”關(guān)系.從工具箱中選中Composition圖標(biāo),然后點(diǎn)選Menu對象。保持鼠標(biāo)按下狀態(tài),拖拽到MenuItem對象上,生成Menu與MenuItem對象之間“構(gòu)成”關(guān)系

Figure 27: 拖拽關(guān)系

Figure 28: 建立Menu與MenuItem的構(gòu)成關(guān)系

6. 由于Menu與MenuItem是1對多的包含關(guān)系,所以,選中設(shè)計(jì)界面中在上一步驟生成的Composition圖標(biāo),點(diǎn)選右側(cè)下方的1文本,使其可以編輯。將其更改為*。選中左側(cè)下方的MenuItem文本,將其修改為Contents

Figure 29: Menu對象與MenuItem對象之間的Composition關(guān)系

7. 重復(fù)5、6步驟,設(shè)置Order對象與OrderItem對象之間的Composition關(guān)系

Figure 30: Order對象與OrderItem對象之間的Composition關(guān)系

8. Menu對象與Order對象之間存在1對多的聯(lián)系,同樣,MenuItem與OrderItem之間也存在著1對多的聯(lián)系。所以,重復(fù)5、6步,在MenuOrder之間MenuItemOrderItem之間分別建立Association關(guān)系

Figure 31: 建立Association關(guān)系

9. 由于MenuItem和OrderItem在數(shù)據(jù)上有一個(gè)明顯的不同就是,OrderItem必須包含數(shù)量,而MenuItem不需要包含。所以我們要在OrderItem中定義一個(gè)數(shù)量屬性。在OrderItem對象中的屬性一欄上點(diǎn)擊右鍵,在彈出的菜單中選擇添加->屬性

Figure 32: 為OrderItem對象添加屬性

10. 此時(shí)OrderItem對象中出現(xiàn)可編輯的屬性,其文本為Attribute1。將Attribute1文本修改為quantity,然后右鍵選擇quantity屬性,在屬性選項(xiàng)卡中修改屬性的數(shù)據(jù)類型為Integer

Figure 33: 定義quantity屬性

11. 至此 ,我們完成了概念模型的設(shè)計(jì)。保存并關(guān)閉當(dāng)前概念類模型設(shè)計(jì)界面

Figure 34: 初步完成概念模型設(shè)計(jì)

概念模型提供了一系列你在整個(gè)需求建模階段需要使用的詞匯和條件。例如,在Order a Meal用例的詳細(xì)描述中,可以這樣寫:

客戶可以選擇菜單來生成訂單。通過在菜單中選擇一個(gè)菜單項(xiàng),系統(tǒng)在訂單中生成訂單項(xiàng)。

注意,上面描述中使用的詞匯就是我們在模型中使用的類名。現(xiàn)在刪除概念模型中類與類之間的不準(zhǔn)確的關(guān)系。例如,圖中明確顯示了每個(gè)訂單只關(guān)聯(lián)一個(gè)菜單。

對客戶需求的誤解可以追溯到對詞匯詳細(xì)解釋的誤解。例如,大多數(shù)餐館都有約定俗成的菜單和訂單,但是訂單項(xiàng)與菜單項(xiàng)的不同卻區(qū)分并不明顯。當(dāng)與客戶討論需求時(shí),暴露這些分歧是很重要的。類圖是一個(gè)很有用的工具,它可以幫助你明確對象以及對象之間的關(guān)系。

業(yè)務(wù)規(guī)則是一個(gè)不與特定用例相關(guān)的需求,應(yīng)該是從整個(gè)系統(tǒng)層面考慮。

許多業(yè)務(wù)規(guī)則是對概念模型中類之間關(guān)系的約束。你可以為概念類圖中的相關(guān)類,定義一些通用靜態(tài)業(yè)務(wù)規(guī)則。例如:

在概念模型中右鍵單擊Order對象,在菜單中選擇添加->添加注釋添加如下約束:“在任何訂單中,所有的訂單項(xiàng)只能來自于同一個(gè)選中的菜單

Figure 35: 對概念模型添加約束注釋

動態(tài)業(yè)務(wù)規(guī)則限制的是事件發(fā)生的順序。例如,你可以使用一個(gè)順序或活動圖來展示:一個(gè)用戶必須登錄才能執(zhí)行你的系統(tǒng)上的操作。

因此,許多動態(tài)規(guī)則能夠取代動態(tài)規(guī)則更有效更通用的執(zhí)行約束。例如,你也許能添加一個(gè)布爾類型的屬性“Logged In”到概念類模型中。你還會將登錄成功作為登錄用例的后置條件,還可以將登錄成功作為其它用例的前置條件。這種方法可以讓你定義一系列事件的組成順序。當(dāng)你需要添加新的用例到用例模型時(shí),動態(tài)約束更加靈活。

Task 3 –?活動圖

你可以使用活動圖來顯示不同用例之間的工作流程。在需求建模的開始階段繪制活動圖是非常有用的。它可以展示用戶執(zhí)行的主要任務(wù)——包含系統(tǒng)內(nèi)外的交互。

這里以訂餐為例:客戶訂餐時(shí)首先需要選擇一個(gè)菜單,然后在菜單中選擇某樣菜品。客戶可以在某個(gè)菜單內(nèi)部重復(fù)多次的選擇相同或不同的菜品。當(dāng)菜品選擇完畢后,客戶可以將選中的菜品一并結(jié)賬付款。

1. 在解決方案瀏覽器中右鍵單擊ModelingProjectDinnerNow項(xiàng)目根節(jié)點(diǎn),在菜單中選擇添加->添加新項(xiàng).

2. 在添加新項(xiàng)對話框中選擇UML活動圖模板,并定義名稱UMLActivityDiagramDinnerNow.activitydiagram. 效果如上圖示.

Figure 36: 添加新項(xiàng)->UML活動圖

3. 此時(shí)會打開活動圖設(shè)計(jì)界面。點(diǎn)選設(shè)計(jì)界面的空白處,在屬性選項(xiàng)卡中修改活動圖的名稱屬性為Order Meal.此時(shí)活動圖左上角的標(biāo)簽應(yīng)該變?yōu)閍ct Order Meal

Figure 37: 修改活動圖的名稱屬性

4. 任何活動都從一個(gè)初始化節(jié)點(diǎn)開始的,所以從工具箱中的UML?活動圖節(jié)點(diǎn)下選擇初始節(jié)點(diǎn)圖標(biāo),并拖拽到設(shè)計(jì)界面中.

Figure 38: 拖拽初始節(jié)點(diǎn)圖標(biāo)

5. 根據(jù)案例的描述,訂餐活動中應(yīng)該有選擇菜單、選擇菜品、付款三項(xiàng)主要活動。這里從工具箱中拖拽三個(gè)活動圖標(biāo)到設(shè)計(jì)界面,分別定義活動內(nèi)容為“Choose Menu”、“Select Menu Item”、“Pay”.

Figure 39: 定義活動

6. 活動圖定義的結(jié)尾,應(yīng)該是活動的結(jié)束節(jié)點(diǎn)。從工具箱中拖拽活動結(jié)束節(jié)點(diǎn)到設(shè)計(jì)界面

Figure 40: 定義活動結(jié)束

7. 在工具箱中選中連接器圖標(biāo),在設(shè)計(jì)界面點(diǎn)選初始圖標(biāo)并保持鼠標(biāo)按下,拖拽到右側(cè)Choose Menu活動圖標(biāo)上。

Figure?41:?拖拽活動之間的連接器

Figure?42:?定義第一個(gè)連接器后的效果

8. 根據(jù)任務(wù)中需求的描述,客戶選擇菜單后,可以再瀏覽選擇菜品,即菜單項(xiàng)。而且客戶可以反復(fù)瀏覽菜單和菜品。這樣在選擇菜品和選擇菜單兩個(gè)活動之間就形成了循環(huán)的關(guān)系。所以我們需要在Choose Menu活動的下方放置一個(gè)合并節(jié)點(diǎn),然后在Select Menu Item活動的下方放置一個(gè)分支節(jié)點(diǎn)

Figure?43:?添加合并節(jié)點(diǎn)和分支節(jié)點(diǎn)

9. 從Choose Menu活動開始,以此向下添加連接器,直到Pay活動

Figure?44:?添加正常流程連接器

10. 為了說明客戶可以在菜單中反復(fù)選擇菜品,我們需要從分支節(jié)點(diǎn)到合并節(jié)點(diǎn)添加一個(gè)連接器,用來表示循環(huán),并對循環(huán)活動添加注釋。在分支節(jié)點(diǎn)的指向下方活動的連接器Guard屬性中添加如下提示:Customer has finished choosing.在返回上方的連接器Guard屬性中添加如下提示:Customer wants to choose more.

Figure?45:?添加循環(huán)活動

11. 當(dāng)客戶選擇完所須的菜品后,任務(wù)就完結(jié)。這里我們從Pay活動活動結(jié)束節(jié)點(diǎn)添加連接器

Figure?46:?訂餐活動終結(jié)

12. 至此,訂餐功能的活動圖我們就構(gòu)建完成。

你可以利用用例圖和活動圖來展示針對相同信息的不同觀點(diǎn)。用例圖可以有效地顯示在大的功能中的嵌套的小的活動,但它不包含活動之間的流程。

例如,同樣是描述訂餐功能,使用用例圖描述如下

Figure?47:?用例圖中的訂餐活動

?

Task 4 –?順序圖

你可以使用順序圖來顯示你的系統(tǒng)與外部活動者之間,或者系統(tǒng)與系統(tǒng)之間的信息交互。順序圖提供了一種用例,它可以非常清晰地展示系統(tǒng)模塊之間的互操作步驟。順序圖在描述多個(gè)用例之間的交互時(shí)非常有效,而且為你的系統(tǒng)提供一些API。

1. 在解決方案瀏覽器中右鍵單擊ModelingProjectDinnerNow項(xiàng)目根節(jié)點(diǎn),在菜單中選擇添加->添加新項(xiàng).

2. 在添加新項(xiàng)對話框中選擇UML順序圖模板,并定義名稱為UMLSequenceDiagramDinnerNow.sequencediagram.

Figure 48 新建UML 順序圖界面

3. Dinner Now系統(tǒng)中的功能主要是四個(gè)對象之間的交互,他們是客戶、Dinner Now 系統(tǒng)、餐廳、銀行。打開UML模型瀏覽器,可以看到已經(jīng)包含客戶活動者、Dinner Now子系統(tǒng)以及餐廳活動者,所以可以直接拖拽這三個(gè)用例到順序圖設(shè)計(jì)界面

Figure 49 添加客戶、DinnerNow子系統(tǒng)、餐廳三個(gè)生命線

4. 由于我們之前設(shè)計(jì)的用例中暫時(shí)不包含銀行用例,所以我們需要從工具箱中拖拽一個(gè)生命線圖標(biāo)到設(shè)計(jì)界面,并在空生命線的屬性面板中修改名稱屬性為Bank,修改Type屬性為None

Figure 50 從工具箱中拖拽生命線圖標(biāo)到設(shè)計(jì)界面

Figure?51?修改Bank生命線屬性

5. 根據(jù)需求我們知道客戶需要在菜單中不斷的瀏覽,不斷的選擇,系統(tǒng)也是不斷的將客戶選中的菜品添加到訂單中。所以我們首先在Dinner Now System生命線上添加一個(gè)異步的調(diào)用。首先在工具箱中選中異步圖標(biāo),然后在設(shè)計(jì)界面上選中客戶生命線,保持鼠標(biāo)按下,拖拽到Dinner Now System生命線上

Figure?52?拖拽異步圖標(biāo)從Customer生命線到Dinner Now System生命線

Figure?53?建立異步調(diào)用后的效果

6. 單擊Message1文本,使其可編輯,將Message1文本修改為?Add Order Item

Figure?54?修改調(diào)用的名稱

7. 因?yàn)榭蛻籼暨x菜品的過程是一個(gè)循環(huán)往復(fù)的過程,所以需要標(biāo)注循環(huán)。右鍵單擊Add Order Item調(diào)用,在彈出的菜單中選擇包圍->循環(huán)組件片段

Figure?55?添加循環(huán)組件片段菜單

Figure?56?添加循環(huán)片段的效果

8. 在循環(huán)片段左上角的Loop文本下方單擊空白區(qū)域,出現(xiàn)可編輯文本框,定義文本內(nèi)容為until complete

Figure?57?編輯循環(huán)標(biāo)簽

9. 當(dāng)客戶選擇完菜品后,需要最終確認(rèn)并提交訂單。重復(fù)步驟56從客戶生命線到Dinner Now?系統(tǒng)生命線建立異步調(diào)用,并修改調(diào)用名稱Confirm Order

Figure?58?添加Confirm Order異步調(diào)用

10. 客戶確認(rèn)訂單后,系統(tǒng)會將訂單發(fā)送給餐廳等待處理,此時(shí),餐廳需要通過系統(tǒng)反饋給客戶一個(gè)訂單發(fā)送是否成功的確認(rèn)。我們需要從工具箱中拖拽一個(gè)同步調(diào)用。在設(shè)計(jì)界面中,從Dinner Now系統(tǒng)生命線上生成的矩形圖標(biāo),拖拽到右側(cè)的餐廳生命線

Figure?59?Confirm Order調(diào)用與餐廳生命線之間建立同步調(diào)用

11. 將指向右側(cè)的調(diào)用文本Message1,修改為Send Order。將下方指向左側(cè)的回調(diào)文本return,修改為OK

Figure?60?修改回調(diào)方法名稱

12. 系統(tǒng)收到餐廳的確認(rèn)后,客戶就可以付款了。系統(tǒng)會請求客戶提交付款的詳細(xì)信息。付款成功的信息會直接返回給客戶。重復(fù)步驟1011,從客戶生命線?Dinner Now系統(tǒng)生命線之間建立同步調(diào)用,將指向右側(cè)的調(diào)用名稱修改為Payment detail,將指向左側(cè)的消息回調(diào)名稱修改為confirmed

Figure?61?添加付款功能調(diào)用和確認(rèn)

13. 客戶提交付款詳細(xì)信息后,系統(tǒng)會直接與銀行之間執(zhí)行付款操作流程。而系統(tǒng)與銀行之間的付款流程完成后,銀行也會返回給Dinner Now 系統(tǒng)一個(gè)確認(rèn)信息。所以重復(fù)步驟1011,從Dinner Now系統(tǒng)上的Payment detail調(diào)用矩形圖標(biāo),到銀行生命線建立同步調(diào)用。將指向右側(cè)調(diào)用名稱修改為Process Payment,將指向左側(cè)回發(fā)調(diào)用名稱修改為OK

Figure?62?添加執(zhí)行付款調(diào)用和確認(rèn)

14. Dinner Now系統(tǒng)收到銀行的付款確認(rèn)后,會將確認(rèn)信息和最終訂單發(fā)送給餐廳。而餐廳收到訂單這個(gè)調(diào)用應(yīng)該先于系統(tǒng)給客戶的確認(rèn)。所以我們需要在Dinner Now系統(tǒng)生命線中的Payment detail調(diào)用矩形圖標(biāo)上,在銀行反饋給系統(tǒng)付款確認(rèn)信息之后,建立一個(gè)到餐廳生命線異步調(diào)用。并將異步調(diào)用的名字改為Confirm Order

Figure?63?添加確認(rèn)訂單調(diào)用

15. 當(dāng)Dinner Now系統(tǒng)向客戶返回了訂餐成功的最終確認(rèn)后,餐廳就可以為客戶送餐了。而送餐的動作不需要經(jīng)過Dinner Now系統(tǒng),所以,在Payment detail 調(diào)用結(jié)束后,直接從餐廳生命線上的Confirm Order調(diào)用上,向客戶生命線添加一個(gè)返回異步調(diào)用Deliver Food。且confirmed回發(fā),和Deliver Food調(diào)用應(yīng)該是并行的 。

Figure?64?添加送餐調(diào)用

16. 到此我們的順序圖就繪制完成,保存并關(guān)閉設(shè)計(jì)界面。

總結(jié)

創(chuàng)建模型往往可以大幅減少需求分析中與客戶的需求相矛盾或含糊不清的地方。不同的利益相關(guān)者往往對系統(tǒng)運(yùn)行的業(yè)務(wù)流程有不同的理解。因此你的第一個(gè)任務(wù)就是解決這些你和客戶之間的分歧。

你會發(fā)現(xiàn) ,

Exercise 2 –?軟件設(shè)計(jì)建模

圖形建模可以幫助你了解、澄清你的系統(tǒng)必須實(shí)現(xiàn)的客戶需求,并使你的代碼能夠與客戶進(jìn)行良好的意見溝通。例如,你可以使用統(tǒng)一建模語言(UML)的用例圖、活動圖、類圖以及順序圖來描述用戶需求。你可以使用UML的組件圖、類圖、活動圖、順序圖來描繪系統(tǒng)的功能。

Task 1?–?活動圖

這個(gè)案例中我們需要參考在需求分析建模中構(gòu)建的活動圖UMLActivityDiagramDinnerNow.activitydiagram但是在軟件設(shè)計(jì)階段和需求分析階段的活動圖略有不同,例如UMLActivityDiagramDinnerNow.activitydiagram中的Pay活動其實(shí)并不經(jīng)過Dinner Now系統(tǒng),所以我們需要對需求分析建模中的Pay活動進(jìn)行修改。將其換成一個(gè)行為調(diào)用活動,并命名為Confirm Order

Figure?65?修改調(diào)用活動

通過需求分析建模中用例圖和活動圖的描述,我們得知,創(chuàng)建訂單時(shí),配貨與付款是并發(fā)的兩件事。所以我們需要在軟件設(shè)計(jì)建模中的活動途中對其加以細(xì)化。

1. 在解決方案瀏覽器中右鍵單擊ModelingProjectDinnerNow項(xiàng)目根節(jié)點(diǎn),在菜單中選擇添加->添加新項(xiàng)

2. 在添加新項(xiàng)對話框中選擇UML活動圖模板,并定義名稱為UMLActivityDiagramCreateOrder.activitydiagram.

Figure?66?新建創(chuàng)建訂單活動圖

3. 從工具箱中拖拽活動的起點(diǎn)圖標(biāo)到設(shè)計(jì)界面,命名為InitialCreateOrder,然后再拖拽第一個(gè)活動到設(shè)計(jì)界面,命名為Create Order

Figure?67?創(chuàng)建訂單活動圖的起始階段

4. 從工具箱中拖拽一個(gè)并行分支節(jié)點(diǎn)到設(shè)計(jì)界面并命名為ForkCreateOrder,以此來表示任何進(jìn)入這里的處理流程都會被分解為若干個(gè)并行的處理進(jìn)程。然后添加從Create Order活動并行分支節(jié)點(diǎn)連接器

Figure?68?添加并行分支節(jié)點(diǎn)

5. 在并行分支節(jié)點(diǎn)的右側(cè),首先建立配貨活動的進(jìn)程。從工具箱中拖拽一個(gè)活動到設(shè)計(jì)界面中,放置在并行分支節(jié)點(diǎn)的下方偏右側(cè)區(qū)域,命名為Dispatch goods建立分支節(jié)點(diǎn)指向Dispatch goods活動的連接器。

Figure?69?添加配貨活動

6. 在并行分支節(jié)點(diǎn)的左側(cè),建立與配貨進(jìn)程并行的付款進(jìn)程。通過需求分析建模中順序圖的描述,我們 了解到,付款行為并不真正由系統(tǒng)完成,而是客戶首先出發(fā)系統(tǒng)的付款事件,然后系統(tǒng)會直接將事件請求發(fā)送到銀行,并同樣利用事件機(jī)制監(jiān)聽銀行端發(fā)回的付款確認(rèn)。由此我們需要兩個(gè)新的活動。一個(gè)是用來發(fā)送請求的事件活動,一個(gè)是用來接收回發(fā)的事件活動。因此,從工具箱中首先拖拽一個(gè)發(fā)送請求活動到設(shè)計(jì)界面中并行分支活動的左側(cè),命名為Send invoice。并建立從并行分支活動到Send invoice活動的連接器。

Figure?70?添加與配貨活動并行的發(fā)送請求活動

7. 在發(fā)送請求Send invoice活動的下方,再從工具箱中拖拽一個(gè)接收事件活動,命名為Receive payment。建立從Send invoice活動到Receive payment活動的連接器。

Figure?71?添加接收付款確認(rèn)事件

8. 兩個(gè)并行處理進(jìn)程定義好之后,需要最終匯集到主要處理流程上繼續(xù)執(zhí)行,所以需要從工具箱中拖拽一個(gè)并行匯總圖標(biāo)到設(shè)計(jì)界面的下方,命名為JoinCreateOrder。分別從Receive payment活動和Dispatch goods活動向并行匯總圖標(biāo)建立連接器

Figure?72?添加并行匯總節(jié)點(diǎn)

9. 最后是關(guān)閉訂單,也代表著訂單處理成功。所以需要從工具箱中拖拽一個(gè)活動到設(shè)計(jì)界面的下方,命名為Close Order。在Close Order活動的下方再放置一個(gè)活動終結(jié)圖標(biāo)。分別從上到下建立連接線。

Figure?73?完成創(chuàng)建訂單活動圖

到此創(chuàng)建訂單的活動就完成了。保存并關(guān)閉當(dāng)前設(shè)計(jì)界面。

Task?2?–?數(shù)據(jù)流圖

你還可以使用數(shù)據(jù)流圖來描述數(shù)據(jù)從一個(gè)動作流向另一個(gè)動作。這個(gè)任務(wù)中,我們模擬訂單生成過程中數(shù)據(jù)的流向及其對存儲介質(zhì)以及活動的影響。在生成訂單過程中,訂單小項(xiàng)和客戶地址分別會有不同的數(shù)據(jù)流向,也會影響不同的活動,所以我們以訂單中的這兩部分?jǐn)?shù)據(jù)作為任務(wù)的開始。

1. 在解決方案瀏覽器中右鍵單擊ModelingProjectDinnerNow項(xiàng)目根節(jié)點(diǎn),在菜單中選擇添加->添加新項(xiàng)

2. 在添加新項(xiàng)對話框中選擇UML活動圖模板,并定義名稱為UMLActivityDiagramOrderDataflows.activitydiagram.

3. 從工具箱中拖拽兩個(gè)活動參數(shù)圖標(biāo)到設(shè)計(jì)界面,水平并排放置,通過單擊圖標(biāo)上的文本,使其可編輯。分別命名為Item listCustomer Address

4. 訂單生成的過程首先會按照當(dāng)前訂單中的商品列表,在商品庫存中找到相應(yīng)的商品。所以需要從工具箱中拖拽一個(gè)活動到設(shè)計(jì)界面中,Item list的下方。命名為Find goods in warehouse

Figure?74?添加查找?guī)齑尕浳锘顒?/strong>

5. 由于Item list是以參數(shù)的形式進(jìn)入Find goods in warehouse活動的。所以我們需要給Find goods in warehouse活動定義輸入接口。右鍵單擊Find goods in warehouse活動,在右鍵菜單中選擇添加->Input pin。通過單擊接口上的文本Input1,使其可編輯,并將文本定義為Item list。然后從Item list參數(shù)圖標(biāo),到新建的輸入接口添加連接器

Figure?75?添加輸入?yún)?shù)接口的右鍵菜單

Figure?76?Find goods in warehouse活動添加輸入?yún)?shù)Item list

6. 客戶的地址需要生成為派送貨物時(shí)的地址標(biāo)簽。所以Customer Address應(yīng)該是Print address label活動的輸入?yún)?shù)。所以,重復(fù)步驟4、5。添加Print address label活動,并為其添加輸入?yún)?shù)接口Customer Address。

Figure?77?添加Print address label活動,并定義它的Customer Address輸入?yún)?shù)

7. 當(dāng)系統(tǒng)在物品庫存中找到了客戶選擇的物品后,會完成兩個(gè)工作。一是把每個(gè)購買物品的數(shù)量從庫存數(shù)量中減去。二是生成訂單號,以便唯一記錄或查閱訂單。要完成第一個(gè)任務(wù),我們需要定義一個(gè)對象,來保存需要修改的物品數(shù)量記錄。所以,從工具箱中拖拽一個(gè)對象節(jié)點(diǎn)圖標(biāo)到設(shè)計(jì)界面中Find goods in warehouse活動的下方,單擊文本Object1將其內(nèi)容修改為Stock Update Record。由于不存在參數(shù)的關(guān)系,所以只需直接從Find goods in warehouse活動Stock Update Record對象建立連接器

Figure?78?添加Stock Update Record對象

8. 系統(tǒng)會使用專門的活動來將Stock Update Record對象中保留的數(shù)據(jù),更新到實(shí)際的數(shù)據(jù)庫中。從工具箱中拖拽一個(gè)活動到設(shè)計(jì)界面,放置在Stock Update Record對象的下方,并將其命名為Update stock database。并建立從Stock Update Record對象到Update stock database活動的連接器。(這里不使用參數(shù)的原因是由于Stock Update Record是對象,可以擁有并調(diào)用自己專屬的方法,而不是將自己作為參數(shù)傳遞給別人的活動)

Figure?79?添加Update stock database活動

9. 步驟7中提到的第二件事就是生成訂單號,而訂單號會與打印的地址標(biāo)簽一同成為配送物品的重要依據(jù)。所以從工具箱中拖拽一個(gè) 新的活動,放置在Find goods in warehouse活動和Print address label活動的下方。將其命名為pack goods。

Figure?80?添加Pack goods活動

10. Pack goods活動需要的兩個(gè)輸入?yún)?shù):訂單號和地址標(biāo)簽,分別來自于Find goods in warehouse活動和Print address label活動。所以可以參照步驟4、5分別為Find goods in warehouse活動Print address label活動添加輸出參數(shù)接口,分別命名為Order IdAddress label。與之對應(yīng)的,要在Pack goods活動上建立兩個(gè)輸入?yún)?shù)接口用來接收Order Id和Address label。最后,分別從Order Id輸出參數(shù)接口Address label接口,到Pack goods活動上各自給定的輸入?yún)?shù)接口,建立連接器

Figure?81?Pack goods活動提供參數(shù)來源

11. 當(dāng)Pack goods活動完成后,就可以發(fā)貨給客戶。此時(shí)在Pack goods活動下方簡單添加一個(gè)活動,命名為Ship goods to customer

Figure?82?添加送貨活動

12. 到此,關(guān)于生成訂單與送貨的數(shù)據(jù)流程圖就完成了,保存并關(guān)閉當(dāng)前設(shè)計(jì)界面。

Task?3?–?組件圖

在Visual Studio 旗艦版中,組件圖展示的是軟件系統(tǒng)設(shè)計(jì)的組成部分。組件圖可以幫助你可視化的定義高層次的系統(tǒng)結(jié)構(gòu)以及服務(wù)行為的接口與調(diào)用。這個(gè)任務(wù)中我們模擬客戶使用Web瀏覽器與我們的Dinner Now系統(tǒng)完成訂餐過程的組件間關(guān)系。

1. 在解決方案瀏覽器中右鍵單擊ModelingProjectDinnerNow項(xiàng)目根節(jié)點(diǎn),在菜單中選擇添加->添加新項(xiàng)

2. 在添加新項(xiàng)對話框中選擇UML組件圖模板,并定義名稱為UMLComponentDiagramDinnerNow.componentdiagram.點(diǎn)擊添加,進(jìn)入組件圖設(shè)計(jì)界面。

Figure?83?新建組件圖

3. 從工具箱中拖拽一個(gè)組件圖標(biāo)到設(shè)計(jì)界面,單擊文本Component1,將其修改為Web Browser。單擊Web Browser組件左上角的收放箭頭,將其收縮。

Figure?84?添加Web Browser組件

4. 從工具箱中拖拽另一個(gè)組件圖標(biāo)到設(shè)計(jì)界面,單擊Component1文本,將其修改為DinnerNow Web Service。調(diào)整其大小如下圖所示

Figure?85?添加Web Browser組件

5. 在 DinnerNow Web Service組件中應(yīng)該提供了餐廳所擁有的功能,如招待客戶訂餐的服務(wù)和進(jìn)行餐飲烹飪的服務(wù)。所以,模仿步驟3,在DinnerNow Web Service組件中放置兩個(gè)小的組件,分別命名為Customer Web ServerKitchen Server在屬性選項(xiàng)卡中,修改名稱屬性為相應(yīng)的名稱。

Figure?86?DinnerNow Web Server組件中添加Customer Web Server?組件和Kitchen Server?組件,并重命名

6. 客戶通過瀏覽器請求訪問到DinnerNow Web Service組件中的Customer Web Server組件,進(jìn)行餐飲相關(guān)的檢索和訂餐。所以右鍵單擊Web Browser組件,選擇添加->請求接口

Figure?87?添加請求接口菜單項(xiàng)

7. 由于瀏覽器請求DinnerNow Web Service使用HTTP協(xié)議,單擊請求接口的文本Interface1,修改為HTTP,并在屬性選項(xiàng)卡中將HTTP請求接口名稱Port1修改為HTTP

Figure?88?添加HTTP請求接口

8. Web Browser組件的請求要想進(jìn)入DinnerNow Web Service組件,后者必須提供一個(gè)提供程序接口用來響應(yīng)。所以右鍵單擊DinnerNow Web Service組件,選擇添加->提供程序接口

Figure?89?DinnerNow WebService添加提供程序接口

9. 單擊提供程序接口上的文本Interface2,將其修改為Customer Web Site。在屬性選項(xiàng)卡中,將名稱Port1修改為Customer Web Site

Figure?90?定義DinnerNow WebService提供程序接口的名稱

10.?右鍵單擊Web Browser組件的HTTP請求接口,選擇添加->依賴。

Figure?91?添加依賴關(guān)系的右鍵菜單

11. 將依賴關(guān)系的另一頭拖放到DinnerNow Web Service組件的Customer Web Site提供程序接口,并單擊

Figure?92?拖放依賴關(guān)系

Figure?93?建立依賴關(guān)系后的效果

12. 客戶的訂餐請求經(jīng)過Customer Web Site接收后,進(jìn)入DinnerNow Web Service執(zhí)行,但是要想讓內(nèi)部的組件獲得外部的請求,同樣需要在內(nèi)部組件上建立提供程序接口用來接收進(jìn)入DinnerNow Web Service的請求。參考步驟10,為Customer Web Server組件添加一個(gè)名稱為Sales的提供程序接口

Figure?94?建立Sales接口

13. 在組件內(nèi)部的各個(gè)部分之間,存在著消息或事件的傳遞,就是委托。所以,在消息內(nèi)部的接口之間使用委托關(guān)系來表示消息的流向和事件的響應(yīng)。參考步驟11,在Customer Web Site接口Sales接口之間建立委托關(guān)系.

Figure?95?建立從Customer Web Site接口到Sales接口的委托關(guān)系

14. 進(jìn)入Customer Web Server組件的訂餐請求,經(jīng)過處理之后,會執(zhí)行兩件事。一是向銀行發(fā)送付款驗(yàn)證,二是將客戶的菜單發(fā)送到廚房進(jìn)行加工。由于銀行屬于DinnerNow Web Service組件的外部,且DinnerNow Web Service只需向銀行發(fā)送付款驗(yàn)證請求即可。所以,參考步驟6、7,為Customer Web Server組件添加PaymentAuthorization請求接口

Figure?96?Customer Web Server組件添加PaymentAuthorization請求接口

15. DinnerNow Web Service組件內(nèi)部的部件要想將消息發(fā)送到組件外部的其他系統(tǒng)中,也需要一個(gè)向外的請求接口。所以參考步驟8、9,在DinnerNow Web Service組件左側(cè)?邊框上添加一個(gè)PaymentAuthorization請求接口,用來將Customer Web Server組件的PaymentAuthorization接口發(fā)送的消息傳遞到DinnerNow Web Service組件外部

Figure?97?DinnerNow Web Service組件添加PaymentAuthorization請求接口

16. 參考步驟13,從Customer Web Server組件PaymentAuthorization請求接口DinnerNow Web Service組件PaymentAuthorization請求接口建立委托關(guān)系。這樣就完成了Customer Web Server向外部銀行的消息傳遞。

Figure?98?從內(nèi)部PaymentAuthorization接口到外部PaymentAuthorization接口建立委托關(guān)系

17. Customer Web Server組件的另一個(gè)功能是將客戶的菜單送到廚房進(jìn)行加工。所以,參考步驟14,為Customer Web Server組件建立另一個(gè)請求接口,名稱為MealOrdering

Figure?99?Customer Web Server組件添加MealOrdering接口

18. 參考步驟12,為Kitchen Server組件添加一個(gè)提供程序接口,命名為MealOrdering

Figure?100?Kitchen Server組件添加MealOrdering接口

19. 由于Customer Web Server和Kitchen Server 兩個(gè)組件同處在DinnerNow Web Service組件內(nèi)部,所以 不需要消息的傳遞和事件機(jī)制,而應(yīng)該建立直接的調(diào)用關(guān)系。右鍵單擊Customer Web Server組件的MealOrdering請求接口,選擇添加->部件引用。然后將鼠標(biāo)拖放到Kitchen Server組件的MealOrdering提供程序接口上,建立 直接的程序集調(diào)用關(guān)系。

Figure?101??Customer Web Server組件的?請求接口??Kitchen Server組件的?MealOrdering提供程序接口建立部件程序集引用關(guān)系

20. Kitchen Server組件將接受來自廚房提交的菜品制作順序,而Kitchen Server會按照制作順序進(jìn)行制作。真實(shí)的廚房應(yīng)該屬于DinnerNow Web Service組件外部的元素。所以,參考步驟8、9,在DinnerNow Web Service組件右邊界,添加一個(gè)提供程序接口,命名為Kitchen Web Site。再參照步驟18,在Kitchen Server組件上添加一個(gè)提供程序接口,命名為KitchenWorkQueue。并參考步驟13從前者到后者建立委托關(guān)系

Figure?102?建立Kitchen Web Site提供程序接口和KitchenWorkQueue提供程序接口,并建立二者之間的委托關(guān)系

21. 至此,我們完成了客戶訂餐到廚房加工幾個(gè)環(huán)節(jié)的組件圖,保存并關(guān)閉設(shè)計(jì)界面

Task?4?–?類圖

軟件設(shè)計(jì)建模中的UML類圖描述了你的應(yīng)用程序中使用的對象和消息結(jié)構(gòu)。這些對象和消息,既包括系統(tǒng)內(nèi)部的調(diào)用,又包含系統(tǒng)與用戶的交互信息。它所描述的信息沒有任何實(shí)現(xiàn)。它的類和關(guān)系可以使用多種方式實(shí)現(xiàn),如數(shù)據(jù)庫表、XML節(jié)點(diǎn)、或者軟件對象組件。這個(gè)案例中,我們需要對用戶需求建模中的概念類圖進(jìn)行一定的修改

1. 在解決方案瀏覽器中的ModelingProjectDinnerNow解決方案下,雙擊類圖UMLClassDiagramDinnerNow.classdiagram,在設(shè)計(jì)界面中打開類圖。

2. 由于菜單與菜單項(xiàng)之間是所有權(quán)的關(guān)系,而訂單與訂單項(xiàng)是整體與部分的關(guān)系,所以這里要修改Menu與MenuItem之間的關(guān)系為所有權(quán)關(guān)系。單擊選中MenuMenuItem之間的關(guān)系,并保持選中狀態(tài)。打開屬性選項(xiàng)卡,依次展開Navigation->First Role組。在First Role組中,找到Aggregation屬性,并在下拉列表選項(xiàng)中將值Composite,修改為Shared,此時(shí)效果如下圖所示,Menu與MenuItem類之間的關(guān)系變成了空心菱形的所有權(quán)關(guān)系

Figure?103?修改Menu類與MenuItem類之間的關(guān)系為所有權(quán)關(guān)系

3. 通常訂單總是需要一個(gè)訂單總價(jià),所以我們?yōu)镺rder類添加一個(gè)保存總價(jià)的屬性。單擊Order類左上角的擴(kuò)展箭頭,展開Order類。

Figure?104?展開Order

4. 右鍵單擊OrderAttributes組,在彈出的菜單中選擇添加->屬性

Figure?105?添加屬性右鍵菜單

5. 此時(shí),在Order類的屬性組內(nèi)出現(xiàn)一個(gè)可編輯的屬性,文本為+Attribute1。保持可編緝狀態(tài),將文本+Attribute1修改為+TotalPrice。然后按下回車,確認(rèn)修改。

Figure?106?修改TotalPrice屬性名

6. 再次單擊選中TotalPrice屬性,在屬性窗口中的常用屬性組中找到類型屬性。在下拉列表中輸入Money。表示這個(gè)總價(jià)屬性是貨幣類型。

Figure?107?修改TotalPrice屬性的數(shù)據(jù)類型

7. 在Order類中,常用的對訂單的操作,這里舉兩個(gè)例子。一個(gè)是添加訂單項(xiàng),一個(gè)是刪除訂單項(xiàng)。右鍵單擊Order操作組,在右鍵菜單中選擇添加->操作

Figure?108?Order類添加方法菜單

8. 此時(shí),在操作組內(nèi)會出現(xiàn)一個(gè)可編輯的操作,文本為+ Operation1(),將其修改為+ AddItem()。按下回車,確認(rèn)修改。

Figure?109?Order類添加AddItem方法

9. Order類中的添加訂單項(xiàng)方法,如果要執(zhí)行,必須接受一個(gè)訂單項(xiàng),作為待插入的資源。單擊AddItem操作,在屬性選項(xiàng)卡中找到參數(shù)列表屬性,單擊屬性值文本框中的省略號按鈕,打開

Figure?110?打開參數(shù)列表屬性的省略號按鈕

Figure?111?操作參數(shù)集合編輯器

10. 如上圖所示,點(diǎn)擊左下角的添加按鈕。在成員列表中選中自動添加的Parameter1參數(shù),在右側(cè)屬性列表中,找到Name屬性,將其修改為MenuItem,在Type屬性的下拉列表中,選擇ModelingProjectDinnerNow::MenuItem。單擊確定完成參數(shù)的定義

Figure?112?AddItem方法添加MenuItem參數(shù)

11. 參照步驟9、10,為Order添加DeleteItem方法,并添加MenuItem參數(shù)

Figure?113?添加DeleteItem方法

12. 通常餐廳除了支持網(wǎng)上下單外,更靈活的方式是電話訂餐。此時(shí)生成的訂單是電話訂單。而電話訂單中包含了普通訂單的所有數(shù)據(jù),但是卻擁有一個(gè)特殊的屬性,就是訂單反饋的電話。在設(shè)計(jì)界面的右下角空白處單擊右鍵,選擇添加->

Figure?114?添加新類

13. 單擊Class1名部分,使其可編輯。將文本Class1修改為PhoneOrder

Figure?115?修改PhoneOrder類名

14. 參照步驟4、5、6,為PhoneOrder添加一個(gè)字符串類型屬性:CallbackNumber

Figure?116?PhoneOrder類添加CallbackNumber屬性

15.?右鍵單擊PhoneOrder,在菜單中選擇添加->繼承

Figure?117?添加繼承菜單

16. 將鼠標(biāo)移動到Order類上,直到出現(xiàn)連接標(biāo)識。點(diǎn)擊Order類,確認(rèn)建立繼承關(guān)系

Figure?118?建立PhoneOrder類到Order類的繼承關(guān)系

Figure?119?建立PhoneOrder類到Order類的繼承關(guān)系完成

17. 至此,更詳細(xì)的類圖的設(shè)計(jì)就完成了。保存并關(guān)閉當(dāng)前設(shè)計(jì)界面

Exercise 3?代碼瀏覽器

概述

當(dāng)你需要修改現(xiàn)有軟件系統(tǒng)時(shí),Visual Studio旗艦版可以幫助你以可視化的方式理解組織結(jié)構(gòu)、關(guān)系以及代碼中的行為。在你修改代碼之前,使用Visual Studio 旗艦版來瀏覽這些更改如何影響代碼,從而幫助你評估風(fēng)險(xiǎn)和工作量。

?

Task 1 –?從現(xiàn)有代碼生成圖形化文檔——查看Visual Studio解決方案中的源代碼概要

1. 打開需要查看的Visual Studio 解決方案,這里我們使用PetShop.

2. 在Visual Studio 2010的頂部菜單中選擇架構(gòu)菜單。在架構(gòu)菜單中選擇生成依賴圖形。接下來可選擇以下選項(xiàng)之一執(zhí)行

生成依賴圖形

圖形顯示的內(nèi)容

按照程序集引用

解決方案中的所有程序集間,以及內(nèi)部程序集與外部依賴項(xiàng)之間的聚集依賴關(guān)系。

為了查看命名空間、類和內(nèi)部方法,以圖形化的方式展開引用。外部組件,只顯示在項(xiàng)目中使用到的。

按照命名空間

解決方案中的所有命名空間之間,以及內(nèi)部命名空間與外部依賴的命名空間之間的聚集依賴關(guān)系。

為了查看命名空間里的類和方法,以圖形化的方式展開命名空間。外部命名空間,只顯示在項(xiàng)目中使用到的。

按照類

解決方案中的所有類之間的聚集依賴關(guān)系。不會出現(xiàn)用到的外部類的信息。

Figure?120?生成依賴圖形的菜單項(xiàng)

Figure?121?按程序集引用瀏覽的架構(gòu)圖

Figure?122?按命名空間瀏覽的架構(gòu)圖

Figure?123?按類結(jié)構(gòu)瀏覽的架構(gòu)圖

Task 2 –從現(xiàn)有代碼生成圖形化文檔——查看Visual Studio 解決方案中的源代碼的特定依賴

利用架構(gòu)資源管理可視化的查看你需要的代碼和關(guān)系。

1. 打開需要查看的Visual Studio 解決方案,這里我們使用PetShop.

2. 如果架構(gòu)瀏覽器沒有打開,在架構(gòu)菜單中,點(diǎn)擊Windows->架構(gòu)瀏覽器

Figure?124?從菜單打開架構(gòu)瀏覽器

3. 在架構(gòu)瀏覽器的第一列中的Visual Studio節(jié)點(diǎn)下選擇如下兩項(xiàng):

l 類視圖:用來查看代碼的邏輯結(jié)構(gòu)。以命名空間、類、方法等形式瀏覽。

Figure?125?類視圖效果

l 解決方案視圖:用來查看代碼的物理結(jié)構(gòu)。以項(xiàng)目、源文件等形式瀏覽。

Figure?126?解決方案視圖效果

4. 選中類視圖/解決方案視圖,右側(cè)會出現(xiàn)命名空間/項(xiàng)目列表。在列表選擇你想查看的命名空間/項(xiàng)目。全選使用Ctrl+A。多選時(shí),按住Ctrl。在第二列選擇要查看的對象同時(shí),第三列會彈出/文件列表

5. 重復(fù)步驟4,選中你想要查看的對象。這里我們在命名空間/項(xiàng)目列表中選中:BLL。并使用Ctrl+A全選類型和成員列表中的所有項(xiàng)。

Figure?127?創(chuàng)建新的圖形文檔的按鈕

6. 需要為你選中的對象建立新的關(guān)系圖,請?jiān)诩軜?gòu)瀏覽器的左上角標(biāo)題欄下方,單擊為你選擇的節(jié)點(diǎn)創(chuàng)建一個(gè)新的圖形文檔按鈕。此時(shí)Visual Studio 就會創(chuàng)建一個(gè)向?qū)D形文檔(.dgml),并打開它。

Figure?128?生成的向?qū)D形文檔

7. 到此,我們就成功將現(xiàn)有代碼展示成了可視化文檔。保存并關(guān)閉當(dāng)前設(shè)計(jì)界面。

?

原文地址:http://www.cnblogs.com/Phoenix-Rock/archive/2010/08/11/VS2010-Model.html

轉(zhuǎn)載于:https://www.cnblogs.com/mqxs/p/5793223.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的【转】【UML】使用Visual Studio 2010 Team System中的架构师工具(设计与建模)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

色综合久久久久久久久五月 | 天堂在线视频免费观看 | 国产精品一区二区三区在线看 | www狠狠操| 日本在线h | 亚洲永久精品在线观看 | 国内精品视频在线播放 | 色是在线视频 | 97免费在线视频 | 日韩av在线资源 | 欧美激情综合五月色丁香 | 成人一级视频在线观看 | 永久黄网站色视频免费观看w | 五月天色站 | 国内精品久久久久影院日本资源 | 在线播放 亚洲 | 欧美一区二区视频97 | 国产国语在线 | 国产69久久精品成人看 | 狠狠色伊人亚洲综合网站野外 | 久久网站av | 成人毛片在线观看视频 | 日韩免费在线观看网站 | 色狠狠操| 国产精品免费一区二区 | av先锋影音少妇 | 在线小视频你懂得 | 亚洲精品18日本一区app | 一区二区高清在线 | 精品视频资源站 | 国产精品影音先锋 | av看片在线 | 久草亚洲视频 | 国产v在线 | 国产无套一区二区三区久久 | 欧洲激情综合 | 国产视频不卡 | 国产97在线播放 | 在线观看中文av | 精品国产一区二区三区男人吃奶 | 四虎影视精品永久在线观看 | 欧美一级片在线 | 91精品视频一区二区三区 | 亚洲国产精品一区二区久久,亚洲午夜 | 97视频免费观看2区 亚洲视屏 | 国产69久久 | 欧美日韩电影在线播放 | 五月婷婷,六月丁香 | 五月婷婷色丁香 | 色爱区综合激月婷婷 | 天天做天天爱天天综合网 | 日韩中文字幕国产精品 | 日韩在线观看你懂得 | 特级西西444www大胆高清无视频 | 精品一区二区亚洲 | 九九热在线视频免费观看 | 西西444www大胆高清视频 | 91热在线 | 少妇啪啪av入口 | 福利精品在线 | 国产一区二区三区高清播放 | 日韩午夜网站 | 日韩99热| 欧美日韩视频精品 | 91在线视频免费 | 伊人色播 | 久久黄色网页 | 香蕉在线观看视频 | 国产美女久久久 | 97av在线| 超碰最新网址 | 欧美视频日韩 | 成年美女黄网站色大片免费看 | 久久国产精品久久久久 | 国产99在线播放 | 99 视频 高清 | 日韩av三区| 超碰97网站 | 国产一区高清在线观看 | 人人射av | 处女av在线 | 午夜久久久久久久久久影院 | 一区二区三区四区五区六区 | 成人v| 久久久久久伊人 | 最近中文字幕完整高清 | 深爱激情综合 | 精品国产一区二区三区在线 | 国产免费又粗又猛又爽 | 麻豆视频国产在线观看 | 又黄又爽又刺激 | 亚洲精品一区中文字幕乱码 | av高清网站在线观看 | 精品在线小视频 | 午夜久久久久久久久久影院 | 一本之道乱码区 | 91在线影院 | 国产精品一区专区欧美日韩 | 国产精品久久久777 成人手机在线视频 | 欧美精彩视频 | 91av资源网 | 玖玖在线视频观看 | 国产精品网红福利 | www黄免费 | 美女国产 | 2021国产在线视频 | 精品久久久久一区二区国产 | 国产成人久久av977小说 | 综合色伊人 | 国产尤物在线观看 | 久久精品这里热有精品 | 欧美va天堂在线电影 | 日韩3区 | 亚洲最新视频在线 | 国内精品久久久久久 | 日韩久久久久久久久 | 中文字幕在线视频第一页 | 日韩激情小视频 | 久久综合婷婷国产二区高清 | 日韩中文字幕免费电影 | 亚洲欧美视频网站 | 玖草影院| 香蕉影视在线观看 | 国产精品k频道 | 黄色av高清| 亚洲在线视频网站 | 国产精品电影一区 | 中午字幕在线观看 | 国产日韩欧美综合在线 | 欧美色道| 91精品国产一区二区在线观看 | 色之综合网 | 久久久网 | 色婷婷视频在线观看 | 日韩中文字幕在线不卡 | 97在线观看免费高清 | 91成人免费在线视频 | 欧美日韩一区二区在线观看 | 国产精品久久久网站 | 美女久久久久久久久久久 | 久久久国产精品久久久 | 精品一区二区视频 | 九九热1 | 日韩啪啪小视频 | 国产一级二级在线播放 | 久久综合久久综合久久 | 成人免费一级片 | 日本福利视频在线 | 色鬼综合网 | 一区二区视频欧美 | 中文字幕在线中文 | 国产精品第一视频 | 国产成人性色生活片 | 福利视频导航网址 | 午夜久操 | 亚洲成年人在线播放 | 国产精品 日韩精品 | 欧美亚洲国产一卡 | 欧美一级久久 | 国产无吗一区二区三区在线欢 | av在线不卡观看 | 亚洲精欧美一区二区精品 | 免费观看黄色12片一级视频 | 国产高清专区 | 热re99久久精品国产66热 | 欧美激情综合色综合啪啪五月 | 草免费视频 | 日本最新高清不卡中文字幕 | 午夜精品一二三区 | www色网站| 草久在线观看 | 2021久久 | 一二三区在线 | 日本性生活一级片 | 国产系列在线观看 | 免费视频国产 | 超碰免费久久 | 日韩高清不卡在线 | 日韩视频免费在线观看 | 黄色一级大片免费看 | 亚洲激情在线观看 | 丁香婷婷综合网 | 黄色高清视频在线观看 | 亚洲欧美综合 | 国产一区二区三区免费在线观看 | www.久久91 | 色先锋资源网 | 91人人澡人人爽人人精品 | 久久久2o19精品| 久久久久久草 | 黄色软件大全网站 | av福利在线播放 | 久久福利在线 | 亚洲成人av在线电影 | 久久久久www | 国产亲近乱来精品 | 中文字幕第 | 国产麻豆精品95视频 | 国产视频精品久久 | 国产一级电影 | av在线a| 91精品久久久久久久99蜜桃 | 中文字幕黄网 | 国产福利91精品一区二区三区 | 日本巨乳在线 | 久热只有精品 | 国产成免费视频 | av青草| 日韩理论在线观看 | 色综合在 | 狠狠色伊人亚洲综合网站野外 | 四虎在线视频 | 97超碰国产在线 | 久久av免费观看 | 亚洲毛片久久 | 狠狠操狠狠干天天操 | 一区二区三区高清在线观看 | 国产亚洲精品女人久久久久久 | 国产成人三级三级三级97 | 国模一二三区 | 日韩在线国产精品 | 国产在线精品一区二区 | 久久久久久亚洲精品 | 久久成人高清视频 | 日av免费 | 色婷婷综合久久久中文字幕 | 欧美日韩精品区 | 久久久久久久久久久网 | 日韩伦理一区二区三区av在线 | 国产精品久久久 | 国内亚洲精品 | 欧美亚洲一区二区在线 | 久久久久中文 | 精品国产一区二区三区久久久蜜臀 | 国产成人在线免费观看 | 日韩在线网址 | 国模一区二区三区四区 | 欧美另类xxxxx | 欧美一级在线看 | 国产日韩欧美在线一区 | 日韩在线视频观看 | 99国产精品 | 免费看日韩片 | 成人av免费网站 | 天天操夜夜干 | 天堂av高清 | 精品嫩模福利一区二区蜜臀 | 免费看污污视频的网站 | 精品久久久久亚洲 | 免费高清在线一区 | 精品久久一区二区 | 成人国产一区 | 国产成人精品电影久久久 | av久久久 | 欧美精品久久久久性色 | 久艹视频免费观看 | 国产一级性生活视频 | 久久精品视频免费播放 | 日韩免费一级a毛片在线播放一级 | 深夜免费小视频 | 中文字幕一区二区三区在线观看 | 成人免费在线观看电影 | 欧美色插 | 在线а√天堂中文官网 | 天天天天干 | 亚洲天堂精品 | 日本精品一区二区三区在线观看 | 五月激情视频 | 国产成人精品999 | 日韩视| 丁香影院在线 | 免费在线观看成人av | 中文在线资源 | 久久99精品久久久久久秒播蜜臀 | 日本精品免费看 | 97在线观看视频 | 欧美成人在线免费 | 日韩av在线不卡 | 国产精品av在线 | 国产一级性生活视频 | 中文字幕91在线 | 午夜精品福利在线 | 99久久精品免费 | 色婷婷久久 | 九九激情视频 | 美女精品久久久 | 伊人五月天综合 | 中文字幕在线观看av | 天天摸天天操天天舔 | 久章草在线观看 | 波多野结衣资源 | 精品亚洲国产视频 | 日本中文字幕一二区观 | av短片在线 | 亚洲精品国产精品国产 | 在线免费黄 | 天天躁天天狠天天透 | 久久久久久久综合色一本 | 欧美性色xo影院 | 欧美日韩免费看 | 一区二区 不卡 | 91人人爽人人爽人人精88v | 久久99精品热在线观看 | 免费在线观看av网站 | 日日夜夜天天干 | 欧美性黑人 | 精品国产电影一区二区 | 亚洲成人中文在线 | 日韩大片在线看 | 中文字幕专区高清在线观看 | 欧美精品久久久久久久久免 | 免费成人在线观看视频 | 综合五月 | 午夜精品一区二区三区四区 | 在线国产能看的 | 96久久精品 | 91精品在线观看入口 | 国产一卡久久电影永久 | 日韩精品一区二区三区在线视频 | 婷五月天激情 | 久久精品爱爱视频 | 天天操夜夜操夜夜操 | 久久久久www | 综合久久久久久久 | 久久66热这里只有精品 | 亚洲精品午夜久久久久久久 | 六月丁香在线观看 | 在线观看国产成人av片 | 国产成人久久精品一区二区三区 | 黄网站www | 久久久久久久久久久网 | 最新久久免费视频 | 免费视频区 | 精品福利在线视频 | 一区二区三区在线免费 | 免费网站看av片 | 精品国产伦一区二区三区观看方式 | 一区二区中文字幕在线观看 | 在线观看视频精品 | 国产一级91| 免费看污的网站 | 成人三级视频 | 丁香5月婷婷久久 | 欧美精品一区在线发布 | 四虎影视成人永久免费观看视频 | 中文国产字幕 | 日韩久久视频 | 99这里有精品| 99精品在线免费观看 | 在线视频手机国产 | 欧美精品被 | 97人人爽 | 久草精品免费 | 韩国一区视频 | 欧美贵妇性狂欢 | 五月开心六月伊人色婷婷 | 精品国产欧美 | 国产精品mv | 亚洲精品黄色在线观看 | 一区二区三区高清在线 | 久久久精品小视频 | 国产一区二区午夜 | 国产视频 亚洲精品 | 国产精品二区在线 | 日韩免费观看高清 | 人人爽人人爽人人爽学生一级 | 一级性生活片 | 久久草在线免费 | 国产91免费在线观看 | av播放在线| 亚洲人成人天堂h久久 | www.888av | 狠狠色综合网站久久久久久久 | 日本一区二区三区视频在线播放 | 视频在线观看一区 | 精品国产视频在线观看 | www一起操 | 日韩啪啪小视频 | 国产精品亚洲片夜色在线 | 美女网站免费福利视频 | 国产黄色片在线免费观看 | 最新av电影网站 | 国产 日韩 欧美 中文 在线播放 | 欧美一区二区三区在线观看 | 日韩免费在线视频观看 | 69国产盗摄一区二区三区五区 | 婷婷日韩 | 97精品国自产拍在线观看 | 亚洲综合在线五月 | 亚洲三级av | 久久精品5| 九色精品免费永久在线 | 久久亚洲综合国产精品99麻豆的功能介绍 | www五月天婷婷 | 在线看v片成人 | 久草视频一区 | 亚洲精品国产精品国产 | 日日夜夜免费精品 | 国产高清福利在线 | 97在线看片 | 欧美国产精品一区二区 | 成人午夜精品福利免费 | 免费情缘 | 黄色软件大全网站 | 日本色小说视频 | 欧美夫妻性生活电影 | 国产精品一区二区久久久久 | 精品一二区 | 亚洲精品国产精品久久99 | 久久久久久蜜av免费网站 | 国产精品一区一区三区 | 久久久国产日韩 | 99免费看片| 亚洲精品在线国产 | 日韩免费一区二区三区 | 97色狠狠| 免费在线色视频 | 91精品爽啪蜜夜国产在线播放 | 国产一级免费观看视频 | 欧美午夜a | 99一区二区三区 | 国产福利在线不卡 | av福利资源| 国产又粗又猛又色又黄视频 | 日韩一区二区三区高清免费看看 | 国产精品久久久久亚洲影视 | 91中文视频| 亚洲在线资源 | 日韩av午夜在线观看 | 1024手机基地在线观看 | 五月婷综合 | 在线你懂的视频 | 91视频首页| 婷婷色网址 | 黄影院| 免费色黄 | 米奇影视7777 | 综合久久综合久久 | 欧美日韩中文字幕视频 | 91视频电影| 免费在线观看成年人视频 | 久久综合久久综合久久综合 | 久久免费观看视频 | 成人一级在线观看 | 天天爽夜夜爽人人爽一区二区 | 亚洲一区二区三区毛片 | a级成人毛片 | 日韩综合精品 | 91福利试看 | 在线免费看黄色 | 欧美精品久久久久性色 | 综合激情伊人 | 91在线视频在线观看 | 久久激情小说 | 日韩成人免费在线观看 | 久99久久 | 日本中文字幕在线一区 | 色播亚洲婷婷 | 97色综合 | 91精品国产乱码久久 | 久久成人高清视频 | 日韩中文字幕免费 | 五月天色丁香 | 午夜18视频在线观看 | 91禁看片| 中文字幕 国产专区 | 五月在线 | 99久精品视频 | 国产中文字幕视频在线观看 | 在线观看国产一区二区 | 操综合| 8x成人免费视频 | 欧美成人精品三级在线观看播放 | 毛片网在线播放 | 亚洲精品国内 | 少妇性bbb搡bbb爽爽爽欧美 | 亚洲高清久久久 | 精品久久久久免费极品大片 | 91成人网在线观看 | 久久亚洲综合国产精品99麻豆的功能介绍 | 日韩精品在线免费观看 | www.久久久com| 九色91av| 欧美成人tv | 99在线观看精品 | 日韩一级黄色av | 亚洲第一av在线 | 国产精品亚洲综合久久 | 99热这里只有精品在线观看 | 精品国产伦一区二区三区观看体验 | 精品国产乱码久久 | 精品在线观 | 九九久久免费 | 国产片免费在线观看视频 | 久久综合狠狠综合 | 亚洲aⅴ乱码精品成人区 | av中文字幕第一页 | 日日插日日干 | 69中文字幕| 在线天堂中文在线资源网 | 中文永久免费观看 | 国产欧美日韩视频 | 伊人久久电影网 | 国产群p | 91日韩免费 | 成年人免费看片 | 色综合天天干 | 亚洲成av人片在线观看香蕉 | 久草网站在线观看 | 亚洲精品玖玖玖av在线看 | 婷婷色网址 | 人人舔人人舔 | 91精品久久久久久综合五月天 | 在线观看成人一级片 | 日本一区二区三区免费观看 | www.香蕉视频在线观看 | 色av男人的天堂免费在线 | 99久久综合狠狠综合久久 | 一区二区精品视频 | 国产九色在线播放九色 | 狠狠天天 | 国产一区二区在线播放视频 | 久久久精品99 | 91精品国产99久久久久久久 | 国产精品一区二 | av久久在线| 国产成年免费视频 | 中文字幕高清 | 国产精品一区在线播放 | 综合亚洲视频 | 九九热精品在线 | 九九九视频精品 | 国产 日韩 欧美 在线 | 国产手机视频精品 | 99久久精品国| 久久av中文字幕片 | 成人午夜剧场在线观看 | 亚洲国产精品传媒在线观看 | 久久久久久久久久免费 | 色在线中文字幕 | 人人干天天干 | 国产激情电影综合在线看 | 欧美日韩在线精品一区二区 | 久久综合久色欧美综合狠狠 | 亚洲无吗av | 日韩av片无码一区二区不卡电影 | 中文字幕色网站 | 久久久午夜视频 | 国内毛片毛片 | 麻豆视频免费入口 | 久久观看免费视频 | 国产一区在线观看免费 | 国产成人一区二区三区在线观看 | 婷婷六月丁香激情 | 国产精品激情 | 国产美女视频一区 | 免费在线成人av电影 | 国产精品一区二区在线看 | 欧美性高跟鞋xxxxhd | 亚洲涩涩一区 | 亚洲第一中文网 | 日本精品在线视频 | 视频在线观看一区 | 中文字幕在线不卡国产视频 | 中文字幕在线免费看 | 一区二区视频在线免费观看 | 国产精品久久 | 久草视频在线免费 | 91在线超碰| 操夜夜操| 亚洲精品影视 | 国产精品久久久久久久久软件 | 日本精品一区二区在线观看 | 黄色小说在线免费观看 | 欧美调教网站 | 丝袜美腿在线播放 | 国产成人精品三级 | 欧美资源在线观看 | 成人av日韩 | 九九热免费在线观看 | 国产一区二区三区午夜 | 日本精品视频免费 | 综合色站导航 | 久久久国产影视 | 夜又临在线观看 | 久艹视频在线观看 | 久草国产在线 | 九九免费在线观看 | 欧美精品久久久久性色 | 国产精品毛片久久久久久久久久99999999 | 国产高清一区二区 | 国产亚洲精品成人av久久ww | 美女免费网站 | 一级性视频 | 亚洲精品视频免费在线 | 国产一区免费 | 欧美日韩久久一区 | 天干啦夜天干天干在线线 | 在线黄色国产电影 | 国产小视频网站 | 99精品欧美一区二区三区黑人哦 | 国产资源精品在线观看 | 亚洲精品va| 中文字幕在线观看免费高清完整版 | 精品视频免费观看 | 欧美一级高清片 | 国产五月色婷婷六月丁香视频 | 久久免费福利视频 | 69绿帽绿奴3pvideos | 亚洲精品玖玖玖av在线看 | 五月宗合网 | 国产亚洲婷婷免费 | 性日韩欧美在线视频 | 国产精品视频在线观看 | 国产香蕉av | 久久久久久国产精品美女 | 激情五月网站 | 国产一区二区在线播放 | 国产99久久久国产精品免费二区 | 久久久久激情 | 九九热视频在线播放 | 国产91精品久久久久久 | 91麻豆.com| 黄色在线观看免费 | 日韩av一区二区在线播放 | 蜜臀aⅴ国产精品久久久国产 | 国产精品video爽爽爽爽 | 日韩电影在线观看一区二区三区 | 亚洲综合一区二区精品导航 | 国产精品久久久久久久久久久久午夜 | 激情综合亚洲精品 | 久久精品老司机 | 波多野结衣在线观看一区二区三区 | 久久精品久久精品久久 | 99热亚洲精品 | 久久国内视频 | av电影中文字幕 | 亚州精品在线视频 | 香蕉视频在线看 | av免费看电影 | 99精品欧美一区二区蜜桃免费 | 色福利网 | 中文字幕在线免费观看视频 | 精品久久九九 | www.在线观看视频 | 日本三级在线观看中文字 | 91精品国产乱码久久桃 | 探花视频在线观看 | 久久视频在线观看中文字幕 | 日韩欧美综合精品 | 精品久久久亚洲 | 黄色三级免费片 | 81精品国产乱码久久久久久 | 精品美女久久久久久免费 | 日韩和的一区二在线 | 亚洲国产中文字幕在线 | 最新一区二区三区 | 国产一级久久久 | 久久久久久久久久久久电影 | 九九亚洲精品 | 婷婷视频在线观看 | 亚洲综合成人专区片 | 国产精品免费观看在线 | 久久免费国产精品 | 亚洲午夜在线视频 | 色com| 97精品超碰一区二区三区 | 亚洲一级片在线观看 | 97色在线观看免费视频 | 久久久免费看视频 | 一级黄色av | 99久久国产免费免费 | 日本黄色一级电影 | 免费久久99精品国产婷婷六月 | 国产中文字幕大全 | 国产成年免费视频 | 一级黄色免费网站 | 日韩高清免费观看 | 日韩av免费在线电影 | 婷婷成人综合 | 99免费在线观看视频 | 久久这里只有精品1 | 激情久久五月 | 国产 中文 日韩 欧美 | 中文字幕不卡在线88 | 黄色毛片在线 | 国产粉嫩在线观看 | av成人在线观看 | 国产视频中文字幕在线观看 | 午夜精品一区二区国产 | 国产成人在线观看 | 在线观看亚洲电影 | 啪啪精品 | 丁香色婷婷 | 丝袜av网站 | 99精品在线免费 | 日批视频在线 | 天天视频色版 | 国产日产精品久久久久快鸭 | 99久久婷婷 | 亚洲黑丝少妇 | 操操操干干干 | 成人理论在线观看 | 日韩午夜剧场 | 中文字幕一区二区三区乱码不卡 | 午夜精品一区二区三区可下载 | 91精品在线视频观看 | 999久久| 天堂在线成人 | 色婷婷一区 | 一级久久久 | 综合伊人久久 | 91污视频在线 | 亚洲无在线 | 日韩性色 | 中文字幕一区二区三区四区视频 | 91精品秘密在线观看 | 又黄又爽的免费高潮视频 | 国产精品18久久久久久首页狼 | 欧美极品少妇xbxb性爽爽视频 | 三级av免费看 | 久久精品国亚洲 | 日韩精品视频免费在线观看 | 国产精品一区二区久久久久 | 国产精品久久电影网 | 精品美女久久久久 | 四月婷婷在线观看 | 久久成人国产精品一区二区 | 激情大尺度视频 | 91精品国产高清自在线观看 | 91av中文| 欧美成人h版在线观看 | 亚州精品成人 | 久久香蕉电影 | 久久,天天综合 | 成人国产精品免费 | 国产亚洲精品女人久久久久久 | 亚洲国产成人精品久久 | 亚洲国产小视频在线观看 | 成 人 黄 色 片 在线播放 | 国产精品入口久久 | 91精彩视频 | 亚洲综合色激情五月 | 欧美一区二视频在线免费观看 | 黄色一级片视频 | 国产精品久久久久久一区二区三区 | 亚洲综合色丁香婷婷六月图片 | 国产精品久久久久久久久久久免费 | 狠狠的操狠狠的干 | 精品伊人久久久 | 六月天色婷婷 | 2023年中文无字幕文字 | 国产高清在线a视频大全 | 亚洲综合欧美精品电影 | 亚洲精品国产综合久久 | aaa毛片视频| 国产精品国产三级国产aⅴ无密码 | 黄色a级片在线观看 | 亚洲欧美日本国产 | 国产精品久久久久三级 | 97在线播放视频 | 久久99久久99精品中文字幕 | 日韩有码中文字幕在线 | 在线免费观看国产黄色 | 久久久精选| 毛片美女网站 | 天天av在线播放 | 国产精品成人免费一区久久羞羞 | 亚洲视频专区在线 | 天天av在线播放 | 99热在线观看 | 久久久久夜色 | 在线视频你懂得 | 国产精品视频app | 在线观看中文字幕亚洲 | 激情五月播播久久久精品 | 激情影音| 国产999精品 | 亚洲天堂自拍视频 | 久久99精品国产99久久 | 亚洲午夜av电影 | 91av在线免费视频 | 国产护士av | 97超碰人人爱 | 欧美日韩高清 | 色婷婷99| av怡红院 | 99tvdz@gmail.com | 中文字幕在线成人 | 久久综合国产伦精品免费 | 免费美女久久99 | 天天夜夜操 | 日日操日日 | 狠狠久久 | www蜜桃视频| 亚洲成av人片在线观看无 | 夜色在线资源 | 天天天干| 91成人免费电影 | 在线观看免费成人 | 波多野结衣一区二区三区中文字幕 | 中文字幕精品一区久久久久 | 久久99精品久久久久久清纯直播 | 麻花豆传媒mv在线观看 | 精品一区 精品二区 | 日韩色区 | 精品久久久久久一区二区里番 | 狠狠的操狠狠的干 | 中文字幕第一页在线 | 一区二区三区在线播放 | 五月天天在线 | 欧美做受高潮 | 欧洲精品一区二区 | 午夜精品久久久久久久99婷婷 | 97精品国产97久久久久久免费 | 五月婷婷激情网 | 肉色欧美久久久久久久免费看 | 黄色一级在线免费观看 | 欧美极品少妇xxxx | 国产精品久久艹 | 99热99热 | 奇米网在线观看 | 视频在线精品 | 国产最新视频在线观看 | 久久久官网 | 国产福利精品一区二区 | 区一区二在线 | 国产精品av在线免费观看 | 久久综合久久综合这里只有精品 | 久久无码av一区二区三区电影网 | 精品国内自产拍在线观看视频 | 国产精品美女免费看 | 狠狠干网址 | 日日天天狠狠 | 波多野结衣视频在线 | 日韩理论电影在线观看 | 天天干,天天射,天天操,天天摸 | 香蕉影视在线观看 | 亚洲狠狠| 日日干夜夜干 | 婷婷色网视频在线播放 | 激情婷婷六月 | 国产成人精品一区二区三区在线观看 | 日本久久久精品视频 | 久草观看 | av高清免费在线 | 欧美一级黄色网 | 久99热| 99久久精品国产一区 | 日韩精品中文字幕久久臀 | 在线观看中文字幕dvd播放 | 免费成人av在线 | 天天综合天天综合 | 日韩av电影一区 | 亚洲香蕉视频 | 在线看岛国av | 久久成人欧美 | av中文字幕网 | 婷婷丁香导航 | 免费在线观看av网址 | 成人综合婷婷国产精品久久免费 | 在线亚洲欧美视频 | 国产明星视频三级a三级点| 在线观看一二三区 | 就操操久久 | 亚洲精品久久久蜜臀下载官网 | 香蕉网站在线观看 | 粉嫩av一区二区三区四区 | 中文字幕一区二区三区四区视频 | 九九色在线观看 | 黄色com | 九九免费精品视频 | a天堂在线看 | 在线看黄色的网站 | 亚洲狠狠婷婷 | 91精品国自产在线观看 | 国产一区在线视频观看 | 国产精品第54页 | 亚洲精品一区二区18漫画 | 91精品视频网站 | 久久国产亚洲视频 | 91片网 | 一级免费黄视频 | 中文字幕在线观看视频网站 | 在线天堂亚洲 | 日韩在线视频国产 | 亚洲欧美日韩中文在线 | 干亚洲少妇 | 免费网站在线 | 天堂av高清| 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 天天曰| 亚一亚二国产专区 | av免费在线播放 | 91在线精品视频 | 国产极品尤物在线 | 操操操人人| 成人av电影免费 | 国产精品免费久久久久影院仙踪林 | 久久免费黄色 | 色婷婷综合久色 | 国产精品3 | 三级视频日韩 | 成人免费观看a | 久久综合欧美精品亚洲一区 | 婷婷六月天丁香 | 在线а√天堂中文官网 | 国产精品久久久久久久7电影 | 国产激情免费 | 超碰人人干人人 | 中文在线中文资源 | 射综合网| 天天插夜夜操 | 亚洲精品五月 | av短片在线 | 国产成人福利在线 | 91大神免费在线观看 | 婷婷丁香色综合狠狠色 | 日韩mv欧美mv国产精品 | 亚洲精品视频免费看 | 国产精品一区二区av日韩在线 | 国产精品自产拍在线观看桃花 | 四虎视频| 国模一二三区 | 久草成人在线 | 黄色在线免费观看网址 | 久久免费av电影 | 最新色视频 | 免费特级黄毛片 | 久久久久久久国产精品影院 | www.色就是色 | 国产精品亚洲视频 | 久久国产精品久久久久 | 91精品久 | 国产一区 在线播放 | 亚洲精品美女免费 | 精品国产一区二区三区久久 | 97超碰在线播放 | 亚洲精品乱码久久久久 | 日韩毛片在线免费观看 | 麻豆一区在线观看 | 日韩在线电影一区二区 | 欧美国产三区 | 婷婷伊人五月 | 亚洲人久久 | 91免费在线播放 | 精品国产一区二区三区四 | 国产精品爽爽久久久久久蜜臀 | 丁香六月av | 99久久精品国产毛片 | 国产成人性色生活片 | www.香蕉视频 | 狠狠干网址 | 欧美激情第一区 | 亚洲日本黄色 | 中文高清av| 欧美坐爱视频 | 国产精品完整版 | 国产伦理剧 | 色网免费观看 | 欧美午夜性 | 婷婷五天天在线视频 | 欧美另类重口 | 久久国色夜色精品国产 | 欧美日韩伦理一区 | 五月婷婷开心 | 欧美男男激情videos | 成人免费看视频 | 超碰97国产精品人人cao | 日韩免费专区 | 国产精品国产三级在线专区 | 欧美一级免费 | 国内精品99| www.亚洲视频| 69久久99精品久久久久婷婷 | 成人午夜电影在线播放 | 啪啪免费视频网站 | 狠狠色婷婷丁香六月 | 精品国产免费久久 | 国产精品黄色影片导航在线观看 | 天天舔天天射天天操 | 成人a免费视频 | 在线观看一 | 国产在线播放不卡 | 中文字幕一区二区三区久久 | 国产视频亚洲 | 亚洲国产wwwccc36天堂 | 香蕉视频国产在线 | 亚洲专区视频在线观看 | 黄色一级免费网站 | 欧美一区二区日韩一区二区 | 国产女做a爱免费视频 | 高清精品久久 | 国产91免费在线观看 | 久久蜜臀av | 国产成a人亚洲精v品在线观看 | 亚洲欧美精品在线 | 操操综合 |