軟件工程課件:第5章 軟件體系結(jié)構(gòu)與設(shè)計(jì)模式_第1頁
軟件工程課件:第5章 軟件體系結(jié)構(gòu)與設(shè)計(jì)模式_第2頁
軟件工程課件:第5章 軟件體系結(jié)構(gòu)與設(shè)計(jì)模式_第3頁
軟件工程課件:第5章 軟件體系結(jié)構(gòu)與設(shè)計(jì)模式_第4頁
軟件工程課件:第5章 軟件體系結(jié)構(gòu)與設(shè)計(jì)模式_第5頁
已閱讀5頁,還剩70頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第5章 軟件體系結(jié)構(gòu)與設(shè)計(jì)模式,軟件體系結(jié)構(gòu)的基本概念 典型的軟件體系結(jié)構(gòu)風(fēng)格 分布式系統(tǒng)結(jié)構(gòu) 體系結(jié)構(gòu)框架 設(shè)計(jì)模式,5.1 軟件體系結(jié)構(gòu)的基本概念,什么是體系結(jié)構(gòu) Bass、Clements和Kazman給出了如下定義:“一個(gè)程序或計(jì)算機(jī)系統(tǒng)的軟件體系結(jié)構(gòu)是指系統(tǒng)的一個(gè)或者多個(gè)結(jié)構(gòu)。結(jié)構(gòu)中包括軟件的構(gòu)件、構(gòu)件的外部可見屬性以及它們之間的相互關(guān)系。外部可見屬性則是指軟件構(gòu)件提供的服務(wù)、性能、使用特性、錯(cuò)誤處理、共享資源使用等?!?這一定義強(qiáng)調(diào)在任一體系結(jié)構(gòu)表述中“軟件構(gòu)件”的角色。,5.1 軟件體系結(jié)構(gòu)的基本概念,Dewayne Perry和A1exander Wo1f曾這樣定義:“軟件體系

2、結(jié)構(gòu)是具有一定形式的結(jié)構(gòu)化元素,即構(gòu)件的集合,包括處理構(gòu)件、數(shù)據(jù)構(gòu)件和連接構(gòu)件。處理構(gòu)件負(fù)責(zé)對(duì)數(shù)據(jù)進(jìn)行加工,數(shù)據(jù)構(gòu)件是被加工的信息,連接構(gòu)件把體系結(jié)構(gòu)的不同部分組合連接起來。” 這一定義注重區(qū)分處理構(gòu)件、數(shù)據(jù)構(gòu)件和連接構(gòu)件。 體系結(jié)構(gòu)設(shè)計(jì)是一系列決策和基本原理的集合,這些決策的目標(biāo)在于開發(fā)高效的軟件體系結(jié)構(gòu)。在體系結(jié)構(gòu)設(shè)計(jì)中所強(qiáng)調(diào)的基本原理是系統(tǒng)的可理解性、可維護(hù)性和可擴(kuò)展性。,1模式 軟件設(shè)計(jì)模式是從軟件設(shè)計(jì)過程中總結(jié)出來的,是針對(duì) 特定問題的解決方案。建筑師C.Alexander對(duì)模式給出的 經(jīng)典定義是:每個(gè)模式都描述了一個(gè)在我們的環(huán)境中不斷 出現(xiàn)的問題及該問題解決方案的核心。在軟件系統(tǒng)中

3、,可 以將模式劃分為以下3類。 (1)體系結(jié)構(gòu)模式(architectural pattern):表達(dá)了軟 件系統(tǒng)的基本結(jié)構(gòu)組織形式或者結(jié)構(gòu)方案,包含了一組預(yù) 定義的子系統(tǒng),規(guī)定了這些子系統(tǒng)的責(zé)任,同時(shí)還提供了 用于組織和管理這些子系統(tǒng)的規(guī)則和向?qū)А5湫偷捏w系結(jié) 構(gòu)模式如OSI參考模型。,5.1 軟件體系結(jié)構(gòu)的基本概念,體系結(jié)構(gòu)模式、風(fēng)格和框架的概念,9.1 軟件體系結(jié)構(gòu)的基本概念,(2)設(shè)計(jì)模式(design pattern):為軟件系統(tǒng)的子系 統(tǒng)、構(gòu)件或者構(gòu)件之間的關(guān)系提供一個(gè)精煉之后的解決方 案,描述了在特定環(huán)境下,用于解決通用軟件設(shè)計(jì)問題的 構(gòu)件以及這些構(gòu)件相互通信時(shí)的各種結(jié)構(gòu)。有代表

4、性的設(shè) 計(jì)模式是Erich Gamma及其同事提出的23種設(shè)計(jì)模式。 (3)慣用法(idiom):是與編程語言相關(guān)的低級(jí)模式, 描述如何實(shí)現(xiàn)構(gòu)件的某些功能,或者利用編程語言的特性 來實(shí)現(xiàn)構(gòu)件內(nèi)部要素之間的通信功能。,9.1 軟件體系結(jié)構(gòu)的基本概念,2風(fēng)格 風(fēng)格是帶有一種傾向性的模式。同一個(gè)問題可以有不同 的解決問題的方案或模式,但我們根據(jù)經(jīng)驗(yàn),通常會(huì)強(qiáng)烈 傾向于采用特定的模式,這就是風(fēng)格。 每種風(fēng)格描述一種系統(tǒng)范疇,該范疇包括: (1)一組構(gòu)件(如數(shù)據(jù)庫、計(jì)算模塊)完成系統(tǒng)需要的某 種功能; (2)一組連接件,它們能使構(gòu)件間實(shí)現(xiàn)“通信”、“合作”和“協(xié)調(diào)”; (3)約束,定義構(gòu)件如何集成為一個(gè)

5、系統(tǒng); (4)語義模型,它能使設(shè)計(jì)者通過分析系統(tǒng)的構(gòu)成成分的 性質(zhì)來理解系統(tǒng)的整體性質(zhì)。,9.1 軟件體系結(jié)構(gòu)的基本概念,3框架 隨著應(yīng)用的發(fā)展和完善,某些帶有整體性的應(yīng)用模式被逐漸固定下來,形成特定的框架,包括基本構(gòu)成元素和關(guān)系。 框架是特定應(yīng)用領(lǐng)域問題的體系結(jié)構(gòu)模式,框架定義了基本構(gòu)成單元和關(guān)系后,開發(fā)者就可以集中精力解決業(yè)務(wù)邏輯問題。 在組織形式上,框架是一個(gè)待實(shí)例化的完整系統(tǒng),定義了軟件系統(tǒng)的元素和關(guān)系,創(chuàng)建了基本的模塊,定義了涉及功能更改和擴(kuò)充的插件位置。典型的框架例子有MFC框架和Struts框架。,5.1 軟件體系結(jié)構(gòu)的基本概念,體系結(jié)構(gòu)的重要作用 (1)體系結(jié)構(gòu)的表示有助于風(fēng)險(xiǎn)

6、承擔(dān)者(項(xiàng)目干系人)進(jìn)行交流。 (2)體系結(jié)構(gòu)突出了早期設(shè)計(jì)決策。 (3)軟件體系結(jié)構(gòu)是可傳遞和可復(fù)用的模型。,9.2 典型的體系結(jié)構(gòu)風(fēng)格,管道/過濾器結(jié)構(gòu),5.2 典型的體系結(jié)構(gòu)風(fēng)格,1、數(shù)據(jù)流風(fēng)格 當(dāng)輸入數(shù)據(jù)經(jīng)過一系列的計(jì)算和操作構(gòu)件的變換形成輸出 數(shù)據(jù)時(shí),可以應(yīng)用這種體系結(jié)構(gòu)。管道/過濾器、批處理序 列都屬于數(shù)據(jù)流風(fēng)格。 管道/過濾器結(jié)構(gòu)如下圖所示。,9.2 典型的體系結(jié)構(gòu)風(fēng)格,從上圖可看出,管道/過濾器結(jié)構(gòu)擁有一組被稱為過濾器(filter)的構(gòu)件,這些構(gòu)件通過管道(pipe)連接,管道將數(shù)據(jù)從一個(gè)構(gòu)件傳送到下一個(gè)構(gòu)件。每個(gè)過濾器獨(dú)立于其上游和下游的構(gòu)件而工作,過濾器的設(shè)計(jì)要針對(duì)某種形

7、式的數(shù)據(jù)輸入,并且產(chǎn)生某種特定形式的數(shù)據(jù)輸出。 如果數(shù)據(jù)流退化成為單線的變換,則稱為批處理序列(batch sequential)。這種結(jié)構(gòu)接收一批數(shù)據(jù),然后應(yīng)用一系列連續(xù)的構(gòu)件(過濾器)變換它。,9.2 典型的體系結(jié)構(gòu)風(fēng)格,管道/過濾器風(fēng)格具有以下優(yōu)點(diǎn): (1)使得軟構(gòu)件具有良好的隱蔽性和高內(nèi)聚、低耦合的特 點(diǎn)。 (2)允許設(shè)計(jì)者將整個(gè)系統(tǒng)的輸入/輸出行為看成是多個(gè)過 濾器的行為的簡(jiǎn)單合成。 (3)支持軟件復(fù)用。只要提供適合在兩個(gè)過濾器之間傳送 的數(shù)據(jù),任何兩個(gè)過濾器都可被連接起來。 (4)系統(tǒng)維護(hù)和增強(qiáng)系統(tǒng)性能簡(jiǎn)單。新的過濾器可以添加 到現(xiàn)有系統(tǒng)中來;舊的可以被改進(jìn)的過濾器替換掉。 (5)

8、允許對(duì)一些如吞吐量、死鎖等屬性的分析。 (6)支持并行執(zhí)行。每個(gè)過濾器是作為一個(gè)單獨(dú)的任務(wù)完 成,因此可與其他任務(wù)并行執(zhí)行。,管道/過濾器風(fēng)格主要缺點(diǎn)如下: (1)通常導(dǎo)致進(jìn)程成為批處理的結(jié)構(gòu)。這是因?yàn)殡m然過濾器可增量式地處理數(shù)據(jù),但它們是獨(dú)立的,所以設(shè)計(jì)者必須將每個(gè)過濾器看成一個(gè)完整的從輸入到輸出的轉(zhuǎn)換。 (2)不適合處理交互的應(yīng)用。當(dāng)需要增量地顯示改變時(shí),這個(gè)問題尤為嚴(yán)重。 (3)因?yàn)樵跀?shù)據(jù)傳輸上沒有通用的標(biāo)準(zhǔn),每個(gè)過濾器都增加了解析和合成數(shù)據(jù)的工作,這樣就導(dǎo)致了系統(tǒng)性能下降,并增加了編寫過濾器的復(fù)雜性。,2、倉庫結(jié)構(gòu),倉庫或知識(shí)庫結(jié)構(gòu)(Repository architecture) 倉

9、庫結(jié)構(gòu)是一種以數(shù)據(jù)為中心的體系結(jié)構(gòu) 包含兩種不同的軟件部件:一個(gè)中心數(shù)據(jù)庫和一組相互獨(dú)立的處理中心數(shù)據(jù)的子系統(tǒng) 主要適合于數(shù)據(jù)由一個(gè)子系統(tǒng)產(chǎn)生而由其他子系統(tǒng)使用的情形 典型應(yīng)用:現(xiàn)代編譯器、管理信息系統(tǒng)、CAD系統(tǒng)和CASE工具集等,倉庫結(jié)構(gòu),14,3、分層結(jié)構(gòu),層次化是一種概念,它將軟件設(shè)計(jì)組織成為類或組件的層次或集合,在同一個(gè)層次上的類或組件完成一個(gè)特定的目的 良好的層次結(jié)構(gòu)可以易于系統(tǒng)的擴(kuò)展與維護(hù),不同的層次之間通過接口進(jìn)行通信 例如:網(wǎng)絡(luò)協(xié)議OSI參考模型,15,網(wǎng)絡(luò)協(xié)議OSI參考模型,分層體系結(jié)構(gòu),17,5.3 分布式系統(tǒng)結(jié)構(gòu),在集中式計(jì)算技術(shù)時(shí)代廣泛使用的是大型機(jī)/小型機(jī)計(jì)算模型。

10、 20世紀(jì)80年代以后,集中式結(jié)構(gòu)逐漸被以PC為主的微機(jī)網(wǎng)絡(luò)所取代。個(gè)人計(jì)算機(jī)和工作站的采用,永遠(yuǎn)改變了大型機(jī)/小型機(jī)計(jì)算模型,從而產(chǎn)生了分布式計(jì)算模型。,5.3 分布式系統(tǒng)結(jié)構(gòu),分布式系統(tǒng)6個(gè)重要特征:( Coulouris 等1994年提出) 資源共享 允許硬件、軟件資源共享使用 開放性 允許來自不同廠商的軟/硬兼容產(chǎn)品 并發(fā)性 許多過程可以在網(wǎng)絡(luò)的不同計(jì)算機(jī)上同時(shí)運(yùn)行,并允許在期間彼此通訊 可伸縮性 分布式系統(tǒng)至少要有可伸縮性,系統(tǒng)的能力可以通過增加新的資源來滿足對(duì)系統(tǒng)的新的需求 容錯(cuò)性 錯(cuò)誤發(fā)生時(shí)可能降低系統(tǒng)的服務(wù)能力,但徹底喪失服務(wù)能力只有在發(fā)生網(wǎng)絡(luò)錯(cuò)誤時(shí)才會(huì)出現(xiàn) 透明性 對(duì)用戶隱藏

11、了系統(tǒng)分布的存在,分布式系統(tǒng)的缺點(diǎn): 復(fù)雜性:比集中式系統(tǒng)更復(fù)雜。系統(tǒng)性能涉及網(wǎng)絡(luò)帶寬和運(yùn)行其上的不同計(jì)算機(jī)速度 保密性:能從網(wǎng)絡(luò)上的許多計(jì)算機(jī)上進(jìn)入系統(tǒng),而且網(wǎng)絡(luò)通訊遭到竊聽 管理有效性:不同的機(jī)型、操作系統(tǒng)和版本,有可能一臺(tái)機(jī)器上的錯(cuò)誤被傳播到其他機(jī)器上,從而產(chǎn)生預(yù)想不到的結(jié)果 不可預(yù)見性:系統(tǒng)負(fù)荷、網(wǎng)絡(luò)負(fù)荷等因素是變化的,故直接影響分布式系統(tǒng)的響應(yīng),20,5.3 分布式系統(tǒng)結(jié)構(gòu),分布式系統(tǒng)設(shè)計(jì)中的問題 資源識(shí)別:如何識(shí)別和引用散布在分布式系統(tǒng)中不同計(jì)算機(jī)上的資源?如:URL(Uniform Resource Locator)命名模式,用來識(shí)別WWW的網(wǎng)頁 通信:除TCP/IP外的其他通訊

12、方式以適應(yīng)特殊需求 服務(wù)質(zhì)量:影響服務(wù)質(zhì)量的因素包括處理過程在系統(tǒng)中的位置 軟件體系結(jié)構(gòu):為應(yīng)用程序選擇一個(gè)合適的軟件體系結(jié)構(gòu)以達(dá)到期望的服務(wù)質(zhì)量,21,5.3 分布式系統(tǒng)結(jié)構(gòu),分布式系統(tǒng)體系結(jié)構(gòu) 客戶機(jī)/服務(wù)器體系結(jié)構(gòu): 系統(tǒng)被看成是提供一組服務(wù)供客戶機(jī)使用,服務(wù)器和客戶機(jī)被區(qū)別對(duì)待。 分布式對(duì)象體系結(jié)構(gòu): 不再區(qū)分服務(wù)器和客戶機(jī),而是將系統(tǒng)當(dāng)成交互的一組對(duì)象,他們的位置無關(guān)緊要,服務(wù)提供者和服務(wù)消費(fèi)者之間沒有區(qū)別。,22,5.3 分布式系統(tǒng)結(jié)構(gòu),5.3 分布式系統(tǒng)結(jié)構(gòu),傳統(tǒng)的C/S體系結(jié)構(gòu)分為兩層。在這種體系結(jié)構(gòu)中,一個(gè)應(yīng)用系統(tǒng)被劃分為客戶機(jī)和服務(wù)器兩部分。典型的兩層C/S體系結(jié)構(gòu)如下圖所

13、示。,客戶機(jī)/服務(wù)器體系結(jié)構(gòu),在一個(gè)客戶機(jī)/服務(wù)器體系中,一個(gè)應(yīng)用程序建模成一組服務(wù),這組服務(wù)由服務(wù)器提供,并由客戶機(jī)來使用 客戶機(jī)需要知道這些服務(wù)器的存在,但通常不知道其他客戶機(jī)的存在 客戶機(jī)和服務(wù)器是不同的過程 過程和處理器之間沒有必要一對(duì)一地映射,24,客戶機(jī)/服務(wù)器體系結(jié)構(gòu),客戶機(jī)/服務(wù)器體系結(jié)構(gòu)的邏輯模型,25,客戶機(jī)/服務(wù)器體系結(jié)構(gòu),分層表示的應(yīng)用結(jié)構(gòu) 表示層: 將信息表達(dá)給用戶 并關(guān)注與用戶的交互 應(yīng)用處理層: 關(guān)注實(shí)現(xiàn)應(yīng)用邏輯 數(shù)據(jù)管理層: 關(guān)注所有數(shù)據(jù)庫的操作,26,客戶機(jī)/服務(wù)器體系結(jié)構(gòu),二層C/S結(jié)構(gòu) 最簡(jiǎn)單的客戶/服務(wù)器體系結(jié)構(gòu) 一個(gè)應(yīng)用被組織成一組客戶機(jī)和一個(gè)服務(wù)器

14、二層C/S結(jié)構(gòu)的兩種形態(tài): 瘦客戶機(jī)模型 所有的應(yīng)用處理和數(shù)據(jù)管理都在服務(wù)器上執(zhí)行,客戶機(jī)只負(fù)責(zé)表示部分 胖客戶機(jī)模型 服務(wù)只負(fù)責(zé)對(duì)數(shù)據(jù)的管理,客戶機(jī)實(shí)現(xiàn)應(yīng)用邏輯和與用戶的交互,27,瘦客戶機(jī)和胖客戶機(jī),28,客戶機(jī)/服務(wù)器體系結(jié)構(gòu),客戶機(jī)/服務(wù)器體系結(jié)構(gòu),瘦客戶機(jī) 缺點(diǎn):繁重的處理負(fù)荷都放在服務(wù)器和網(wǎng)絡(luò)上,造成C/S之間的網(wǎng)絡(luò)數(shù)據(jù)流量過大 胖客戶機(jī) 較好地利用的客戶端處理機(jī)的能力,著名的實(shí)例:銀行ATM系統(tǒng) 缺點(diǎn):應(yīng)用分散在許多不同的計(jì)算機(jī)上,當(dāng)更新軟件時(shí)工作量大,系統(tǒng)管理復(fù)雜,29,客戶機(jī)/服務(wù)器體系結(jié)構(gòu),客戶機(jī)/服務(wù)器ATM系統(tǒng),31,三層C/S結(jié)構(gòu) 三層C/S結(jié)構(gòu)不意味著有三個(gè)計(jì)算機(jī)系

15、統(tǒng)連到網(wǎng)絡(luò)上,可以僅僅是軟件上的分層,即:一臺(tái)服務(wù)器既提供應(yīng)用處理又提供數(shù)據(jù)管理,客戶機(jī)/服務(wù)器體系結(jié)構(gòu),三層客戶/服務(wù)器風(fēng)格,32,瀏覽器/服務(wù)器(B/S)風(fēng)格,瀏覽器/服務(wù)器(B/S)風(fēng)格就是上述三層應(yīng)用結(jié)構(gòu)的一種實(shí)現(xiàn)方式,其具體結(jié)構(gòu)為:瀏覽器/Web服務(wù)器/數(shù)據(jù)庫服務(wù)器。 B/S體系結(jié)構(gòu)主要是利用不斷成熟的WWW瀏覽器技術(shù),結(jié)合瀏覽器的多種腳本語言,用通用瀏覽器就實(shí)現(xiàn)了原來需要復(fù)雜的專用軟件才能實(shí)現(xiàn)的強(qiáng)大功能,并節(jié)約了開發(fā)成本。從某種程度上來說,B/S結(jié)構(gòu)是一種全新的軟件體系結(jié)構(gòu)。,33,B/S體系結(jié)構(gòu),34,35,互聯(lián)網(wǎng)銀行系統(tǒng)的分布式體系結(jié)構(gòu),其間通訊可不基于互聯(lián)網(wǎng)標(biāo)準(zhǔn),可以使用支持

16、數(shù)據(jù)庫查詢的有效中間件負(fù)責(zé)提取數(shù)據(jù),B/S體系結(jié)構(gòu)優(yōu)點(diǎn),基于B/S體系結(jié)構(gòu)的軟件,系統(tǒng)安裝、修改和維護(hù)全在服務(wù)器端解決。用戶在使用系統(tǒng)時(shí),僅僅需要一個(gè)瀏覽器就可運(yùn)行全部的模塊,真正達(dá)到了“零客戶端”的功能,很容易在運(yùn)行時(shí)自動(dòng)升級(jí) B/S體系結(jié)構(gòu)還提供了異種機(jī)、異種網(wǎng)、異種應(yīng)用服務(wù)的聯(lián)機(jī)、聯(lián)網(wǎng)、統(tǒng)一服務(wù)的最現(xiàn)實(shí)的開放性基礎(chǔ)。,36,分布式對(duì)象體系結(jié)構(gòu),分布式對(duì)象體系結(jié)構(gòu) 在分布式對(duì)象體系結(jié)構(gòu)設(shè)計(jì)中客戶機(jī)和服務(wù)器不存在差別 構(gòu)成系統(tǒng)的基本組件是對(duì)象,一個(gè)對(duì)象能向另一個(gè)對(duì)象提供服務(wù),并能接受來自其它對(duì)象的服務(wù) 接受服務(wù)者即扮演客戶機(jī)角色,提供服務(wù)者就是服務(wù)器,37,分布式對(duì)象體系結(jié)構(gòu),分布式對(duì)象體系

17、結(jié)構(gòu),分布式對(duì)象體系結(jié)構(gòu),對(duì)象可能分布在網(wǎng)絡(luò)的多臺(tái)計(jì)算機(jī)上,它們通過中間件相互通訊,這個(gè)中間件被稱作“對(duì)象請(qǐng)求代理”(也叫:軟總線) 對(duì)象體系結(jié)構(gòu)的主要缺點(diǎn)是設(shè)計(jì)比C/S結(jié)構(gòu)更復(fù)雜 適合使用分布式對(duì)象結(jié)構(gòu)的一個(gè)實(shí)例是數(shù)據(jù)挖掘系統(tǒng),即:在多個(gè)數(shù)據(jù)庫間尋找數(shù)據(jù)間的關(guān)系,分布式對(duì)象體系結(jié)構(gòu),數(shù)據(jù)挖掘系統(tǒng)的分布式體系結(jié)構(gòu),41,其中: 數(shù)據(jù)庫提供只讀訪問功能的對(duì)象 集成器專注一種特別類型的關(guān)系,從所有數(shù)據(jù)庫中收集信息試著推出這種關(guān)系 可視生成器與集成器對(duì)象交互,提供所發(fā)現(xiàn)關(guān)系的可視化效果圖和報(bào)告,分布式對(duì)象體系結(jié)構(gòu),41,5.4 體系結(jié)構(gòu)框架,1、模型/視圖/控制器結(jié)構(gòu) Modle/View/Cont

18、roller Architecture 支持?jǐn)?shù)據(jù)的多重表示 要顯示的數(shù)據(jù)被封裝在模型中的對(duì)象里 每個(gè)模型對(duì)象可能與許多的視圖對(duì)象關(guān)聯(lián) 每個(gè)視圖都有一個(gè)相關(guān)的處理用戶輸入和設(shè)備交互的控制對(duì)象,9.5 體系結(jié)構(gòu)框架,用戶交互的MVC模型,信息表示示意圖:,44,J2EE的核心體系結(jié)構(gòu)就是在MVC框架的基礎(chǔ)上進(jìn)行擴(kuò)展得到的,如下圖所示。,9.5 體系結(jié)構(gòu)框架,J2EE體系結(jié)構(gòu)框架,J2EE的核心體系結(jié)構(gòu)框架,客戶層:用戶通過客戶層與系統(tǒng)交互。該層可以是各種類型的客戶端。例如,可編程客戶端(如基于Java Swing的客戶端或applet),純Web瀏覽器客戶端,WML移動(dòng)客戶端等。 資源層:資源層可

19、以是企業(yè)數(shù)據(jù)庫,電子商務(wù)解決方案中的外部企業(yè)系統(tǒng),或者是外部SOA服務(wù)。數(shù)據(jù)可以分布在多個(gè)服務(wù)器上。,從上圖可看出,J2EE模型是分層結(jié)構(gòu),中間的3層(表示層,業(yè)務(wù)層,集成層)包含應(yīng)用程序構(gòu)件,客戶層和資源層處于應(yīng)用程序的外圍。,9.5 體系結(jié)構(gòu)框架,表示層:也稱為Web層或服務(wù)器端表示層,用戶通過表示層來訪問應(yīng)用程序。在基于Web的應(yīng)用系統(tǒng)中,表示層由用戶界面代碼和運(yùn)行于Web服務(wù)器或應(yīng)用服務(wù)器上的過程組成。參考MVC框架,表示層包括視圖構(gòu)件和控制器構(gòu)件。 業(yè)務(wù)層:業(yè)務(wù)層包含表示層中的控制器構(gòu)件沒有實(shí)現(xiàn)的一部分應(yīng)用邏輯。它負(fù)責(zé)確認(rèn)和執(zhí)行企業(yè)范圍內(nèi)的業(yè)務(wù)規(guī)則和事務(wù),并管理從資源層加載到應(yīng)用程序

20、高速緩存中的業(yè)務(wù)對(duì)象。 集成層:集成層負(fù)責(zé)建立和維護(hù)與數(shù)據(jù)源的連接。例如,通過JDBC與數(shù)據(jù)庫進(jìn)行通信,利用Java消息服務(wù)(JMS)與外部系統(tǒng)聯(lián)合。,9.5 體系結(jié)構(gòu)框架,5.5 設(shè)計(jì)模式,回顧學(xué)過的數(shù)據(jù)結(jié)構(gòu) Trees, Stacks, Queues 它們給軟件開發(fā)帶來了什么? 問題 在軟件體系結(jié)構(gòu)設(shè)計(jì)中是否存在一些可重用的解決方案? 答案是肯定的 設(shè)計(jì)模式使我們可以重用已經(jīng)成功的經(jīng)驗(yàn) PatternDocumented experience Design Patterns: Elements of Reusable Object-Oriented Software,48,在眾多應(yīng)用中普遍

21、存在的軟件結(jié)構(gòu)和結(jié)構(gòu)關(guān)系。它們?cè)诓煌念I(lǐng)域中獲得應(yīng)用,成為處理特定問題的高效且成熟的設(shè)計(jì)模板,稱為“模式(Pattern)” 設(shè)計(jì)模式實(shí)際上是對(duì)經(jīng)常重復(fù)出現(xiàn)的類似問題的一個(gè)解決方案(一個(gè)模式),這個(gè)解決方案在其它語境中也同樣適用。 面向?qū)ο蟮脑O(shè)計(jì)模式是一組相互協(xié)作以實(shí)現(xiàn)某個(gè)設(shè)計(jì)目標(biāo)的對(duì)象或?qū)ο箢惖男〖?49,5.5 設(shè)計(jì)模式,一般來說,一個(gè)模式有4個(gè)基本的要素: 模式名稱:用于描述模式的名字,說明模式的問題、解決方案和效果。 問題:說明在何種場(chǎng)合使用模式。 解決方案:描述設(shè)計(jì)的組成成分、它們之間的相互關(guān)系、各自的職責(zé)和合作方式。 效果:描述了模式使用的效果及使用模式應(yīng)當(dāng)權(quán)衡的問題。,目前已提

22、出的設(shè)計(jì)模式的類型: 創(chuàng)建型模式 抽象工廠、生成器、工廠方法、原型、單件 結(jié)構(gòu)型模式 適配器、橋接、組成、裝飾、外觀等 行為型模式 職責(zé)鏈、命令、迭代器、狀態(tài)等,51,抽象工廠,(1) 目的:提供一個(gè)接口用以創(chuàng)建一個(gè)相聯(lián)系或相依賴的對(duì)象族,而無須指定它們的具體類。 (2) 思路:例如,在創(chuàng)建可支持多種GUI標(biāo)準(zhǔn)(如Motif和Persentation Manager)的繪圖用戶界面工具包時(shí),因?yàn)椴煌腉UI標(biāo)準(zhǔn)會(huì)定義出不同外觀及行為的“用戶界面組件”(widget),如滾動(dòng)條、按鈕、視窗等。為了能夠囊括各種GUI標(biāo)準(zhǔn),應(yīng)用程序不能把組件寫死,不能限制到特定GUI風(fēng)格的組件類,否則日后很難換成其

23、他GUI風(fēng)格的組件。,抽象工廠,解決方法是:先定義一個(gè)抽象類WidgetFactory(用斜體字區(qū)分抽象類),這個(gè)類聲明了創(chuàng)建各種基本組件的接口,再逐一替各種基本組件定義相對(duì)應(yīng)的抽象類,如 ScrollBar、Window等,讓它們的具體子類來真正實(shí)現(xiàn)特定的GUI標(biāo)準(zhǔn)。,抽象工廠,可支持多種GUI標(biāo)準(zhǔn)的繪圖用戶界面工具包的結(jié)構(gòu)圖,表示了兩種不同的用戶界面工具包,可抽象為一種形式WindowKit 根據(jù)實(shí)現(xiàn)平臺(tái)的不同, WindowKit被綁定到不同的實(shí)例中 說明:設(shè)計(jì)模式描述了對(duì)重復(fù)出現(xiàn)問題的解決方案,55,抽象工廠,(3) 結(jié)構(gòu):抽象工廠模式的結(jié)構(gòu)如圖所示。,抽象工廠,(4) 參與者職責(zé) a

24、) 抽象工廠類(AbstractFactory):聲明創(chuàng)建抽象產(chǎn)品對(duì)象的操作的接口。 b) 具體工廠類(ConcreteFactory):實(shí)現(xiàn)產(chǎn)生具體產(chǎn)品對(duì)象的操作。 c) 抽象產(chǎn)品類(AbstractProduct):聲明一種產(chǎn)品對(duì)象的接口。 d) 具體產(chǎn)品類(ConcreteProduct):定義將被相應(yīng)的具體工廠類產(chǎn)生的產(chǎn)品對(duì)象,并實(shí)現(xiàn)抽象產(chǎn)品類接口。 e) 客戶(Client):僅使用由抽象工廠類和抽象產(chǎn)品類聲明的接口。,抽象工廠,(5) 協(xié)作 在執(zhí)行時(shí),AbstractFactory將產(chǎn)品交給ConcreteFactory創(chuàng)建。 ConcreteFactory類的實(shí)例只有一個(gè),專門針

25、對(duì)某種特定的實(shí)現(xiàn)標(biāo)準(zhǔn),建立具體可用的產(chǎn)品對(duì)象。 如果想要建立其他標(biāo)準(zhǔn)的產(chǎn)品對(duì)象,客戶程序就得改用另一種ConcreteFactory。,適配器,(1)目的:適配器模式將一個(gè)類的接口轉(zhuǎn)換為客戶期望的另一種接口,使得原本不匹配的接口而無法合作的類可以一起工作。 (2)思路:有時(shí)要將兩個(gè)沒有關(guān)系的類組合在一起使用,一種解決方案是修改各自類的接口,另一種辦法是使用Adapter模式,在兩種接口之間創(chuàng)建一個(gè)混合接口。 例如,設(shè)有一個(gè)圖形編輯器,可畫直線、多邊形、文本等。它的接口定義成抽象類Shape,它的子類負(fù)責(zé)畫各種圖形。此外,還有一個(gè)外購的GUI軟件包TextView,用于顯示,但它沒有Shape功

26、能。,適配器,如何讓TextView的接口轉(zhuǎn)換成為Shape的接口,有兩種方法: 讓TextShape同時(shí)繼承Shape的接口和TextView的服務(wù)(多重繼承); 在TextShape中建立TextView的實(shí)例,再通過TextView給出TextShape的接口。 前者是適配器的類模式,后者是對(duì)象模式。下圖就是適配器的對(duì)象模式。,適配器,(3) 結(jié)構(gòu):適配器模式有類適配器模式和對(duì)象適配器模式。類適配器可以通過多繼承方式實(shí)現(xiàn)不同接口之間的相容和轉(zhuǎn)換,如圖所示。,適配器,而一個(gè)對(duì)象適配器則依賴對(duì)象組合的技術(shù)實(shí)現(xiàn)接口的相容和轉(zhuǎn)換,如圖所示。,適配器,(4) 參與者職責(zé) a) 目標(biāo)(Target)

27、:定義客戶使用的與應(yīng)用領(lǐng)域相關(guān)的接口。 b) 客戶(Client):與具有Target接口的對(duì)象合作。 c) 被匹配者(Adaptee):需要被轉(zhuǎn)換匹配的一個(gè)已存在接口。 d) 適配器(Adapter):將Adaptee的接口與Target接口匹配。,適配器,(5) 協(xié)作:客戶調(diào)用Adapter對(duì)象的操作,然后Adapter的操作又調(diào)用Adaptee對(duì)象中負(fù)責(zé)處理相應(yīng)請(qǐng)求的操作。,觀察者,(1)目的:定義對(duì)象間的一種一對(duì)多的依賴關(guān)系,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),所有依賴于它的對(duì)象都得到通知,并被自動(dòng)更新。 (2)思路:例如,許多GUI軟件包都將數(shù)據(jù)顯示部分與應(yīng)用程序底層的數(shù)據(jù)表示分開,以利于分

28、別復(fù)用。但這些類也能合作,如圖所示的計(jì)算表和直方圖都是針對(duì)同一數(shù)據(jù)對(duì)象的兩種不同表示方式。,觀察者,(3) 結(jié)構(gòu):Observer模式的結(jié)構(gòu)如圖所示。,觀察者,(4) 參與者職責(zé) a) 主題(Subject):認(rèn)得它的觀察者。任意數(shù)目的觀察者對(duì)象均可訂閱一個(gè)主題。另外,提供一個(gè)連接觀察者對(duì)象和解除連接的接口。 b) 觀察者(Observer):定義了一個(gè)自我更新的接口。一旦發(fā)現(xiàn)主題有變時(shí)借助接口通知自己隨之改變。 c) 具體主題(ConcreteSubject):存儲(chǔ)具體觀察者對(duì)象關(guān)心的狀態(tài);當(dāng)狀態(tài)改變時(shí)向它的觀察者發(fā)送通知。 d) 具體觀察者(ConcreteObserver):維持一個(gè)對(duì)具體主題對(duì)象的引用;存儲(chǔ)要與主題一致的狀態(tài);實(shí)現(xiàn)觀察者的自我更新

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論