【正文】
SOA 最主要的應(yīng)用場(chǎng)合在于解決在 Inter環(huán)境下的不同商業(yè)應(yīng)用之間的業(yè)務(wù)集成問(wèn)題。對(duì)于模型 ,它所提供的 API不能只針對(duì)某一個(gè)專門的視圖或控制器 ,應(yīng)該更一般化以適應(yīng)不同客戶的需求。在這種架構(gòu)中,一般需要由一個(gè)中心服務(wù)器完成發(fā)現(xiàn)和管理節(jié)點(diǎn)的操作。 205 ? 代理程序駐留在一個(gè)不應(yīng)該頻繁更改的、眾所周知的位置。 ? 缺點(diǎn): ? 容易導(dǎo)致批處理方式:每個(gè)過(guò)濾器從輸入數(shù)據(jù)到輸出數(shù)據(jù)的轉(zhuǎn)換是一個(gè)整體。 ? 這種體系架構(gòu)模式具有許多特性: – 過(guò)濾器是獨(dú)立運(yùn)行的部件。 ? 系統(tǒng)的設(shè)計(jì)尤其是處理步驟的內(nèi)部連接,必須考慮以下因素: – 未來(lái)系統(tǒng)的升級(jí)通過(guò)替換某些處理步驟,或重組步驟。它是由過(guò)濾器和管道組成的 .每個(gè)處理步驟都被封裝在一個(gè)過(guò)濾器組件中,數(shù)據(jù)通過(guò)相鄰過(guò)濾器之間的管道進(jìn)行傳輸。作為這個(gè)過(guò)程的一部分,中間層負(fù)責(zé)處理來(lái)自數(shù)據(jù)存儲(chǔ)或者發(fā)送給數(shù)據(jù)存儲(chǔ)的數(shù)據(jù)。把問(wèn)題劃分開來(lái)各個(gè)解決,易于控制,易于延展,易于分配資源 … ? 面向?qū)ο蟮?、基于模塊化的組件設(shè)計(jì)需要能夠方便地修改應(yīng)用程序的各個(gè)部分。 ? 設(shè)計(jì)模式是中等尺度的結(jié)構(gòu)策略。 ? 框架一般都經(jīng)過(guò)很多人使用,所以結(jié)構(gòu)很好,所以擴(kuò)展性也很好,而且它是不斷升級(jí)的,使用框架的開發(fā)者可以直接享受別人升級(jí)代碼帶來(lái)的好處。是某種應(yīng)用的半成品,就是一組組件,供選用完成自己的系統(tǒng)。 183 架構(gòu)的兩要素 ? 元件劃分和設(shè)計(jì)決定。一個(gè)易于維護(hù)的系統(tǒng)可以有效地降低技術(shù)支持的花費(fèi)。 ? 在建造一個(gè)系統(tǒng)之前會(huì)有很多的重要決定需要事先作出,而一旦系統(tǒng)開始進(jìn)行詳細(xì)設(shè)計(jì)甚至建造,這些決定就很難更改甚至無(wú)法更改。 170 多個(gè) Decorator ? 有時(shí) ,在同一個(gè)類層次結(jié)構(gòu)中可能存在兩個(gè)或者更多的裝飾器( decorator)。 ? 兩個(gè)可以統(tǒng)計(jì)的量:成本;數(shù)量 ? 例如可以生成一張一個(gè)組合件總成本的報(bào)表 ,或者生成一張列出了一個(gè)組合件中所有零件的報(bào)表。 ? 問(wèn)題:直接增加 configureForUnix方法其實(shí)回避了一個(gè)問(wèn)題:對(duì)于Windows如何處理 ? MacOS? Linux? ? 必須針對(duì)所使用的每一種新操作系統(tǒng)都要向 Modem層次結(jié)構(gòu)中增加一個(gè)新方法 ? 這種做法是丑陋的:我們永遠(yuǎn)無(wú)法封閉 Modem接口。這一模式的關(guān)鍵是一個(gè)抽象的 Command類。 畫圖程序分別擁有一個(gè)基于 DP1 的對(duì)象( V1Drawing) 和一個(gè)基于 DP2的對(duì)象 ( V2Drawing) 。 150 需求變化 ? 用戶要求支持另一種形狀 ——圓形。 144 原始的類與接口 145 例:電子零售系統(tǒng) ? 該電子零售系統(tǒng)必須處理來(lái)自不同國(guó)家的銷售定單。每個(gè)角色一次只能使用一個(gè)武器,但是可以在游戲的過(guò)程中換武器。 (―‖, ―log‖)。 ? 發(fā)現(xiàn)“龐大的繼承體系”的替代方案。 – 實(shí)際上,通常的錯(cuò)誤是使用繼承來(lái)實(shí) 現(xiàn)一種功能分解,其中每個(gè)抽象層次恰有一個(gè)職責(zé)! 無(wú)論從哪個(gè)方面來(lái)講,這都是無(wú)意義的,是會(huì)導(dǎo)致復(fù)雜的、難以理解的模型。解決問(wèn)題的策略是依次查看這些類,看看是否每個(gè)類都能夠被分解成為 兩個(gè)或者多個(gè)能夠承擔(dān)恰當(dāng)數(shù)目職責(zé)的、更小的類。 ? 每個(gè)類大約 3~5個(gè)職責(zé) ─典型地,類應(yīng)該保持盡可能簡(jiǎn)單,這通常限制類能夠支持的 3~5個(gè)職 責(zé)的數(shù)目。 但這些職責(zé)似乎同購(gòu)物籃的目的或直覺(jué)語(yǔ)法不匹配。 126 分析類的職責(zé) ? 職責(zé)是類和它的客戶之間的契約或者是類對(duì)它的客戶的義務(wù)。 ? 標(biāo)識(shí)分析機(jī)制:將那些問(wèn)題領(lǐng)域(應(yīng)用邏輯)沒(méi)有直接關(guān)聯(lián)的計(jì)算機(jī)概念及相應(yīng)的復(fù)雜行為表述為支撐分析工作的“占位符”。 ? 用例名用動(dòng)賓結(jié)構(gòu)描述,不要寫成一個(gè)名詞。另一方面它可以劃分系統(tǒng)與外部實(shí)體的界限,是系統(tǒng)設(shè)計(jì)的起點(diǎn)。 ? 因?yàn)榻巧梢詤^(qū)分對(duì)象,所以附在一個(gè)類上的關(guān)聯(lián)名必須唯一(可以把角色名想象成類的偽屬性)。該類從 MovieFinder接口派生即可。 ? 給 finder定義一個(gè)接口: public interface MovieFinder { List findAll()。 for (Iterator it = ()。 } 92 需求在變化 2 ? 客戶希望 Copy程序有時(shí)可以輸出到紙帶穿孔機(jī)上。 75 違反 LSP導(dǎo)致違反 OCP的簡(jiǎn)單例子 76 改善 77 例:會(huì)議管理系統(tǒng) 78 例: GUI對(duì)象 ? 假定一個(gè) Component代表一個(gè) GUI對(duì)象,如按鈕或者文本框等。 ? 比較大的事務(wù)。 ? 其次 ,面向?qū)ο笤O(shè)汁也更易測(cè)試 : 所有類都能并且應(yīng)當(dāng)進(jìn)行獨(dú)立的測(cè)試。 ? 業(yè)務(wù)邏輯向表現(xiàn)層返回實(shí)際的業(yè)務(wù)對(duì)象 ,而不是 DTO。 – 業(yè)務(wù)邏輯能參與由遠(yuǎn)程客戶發(fā)起的分布式事務(wù)。 ? Service的事務(wù)化封裝的意義等于把 OO的 Domain logic轉(zhuǎn)換為過(guò)程的 Service 事務(wù)腳本。 ? 設(shè)計(jì)簡(jiǎn)單易行,底層模型非常穩(wěn)定。2)收集返回給表現(xiàn)層的數(shù)據(jù)。類中有屬性和關(guān)聯(lián),協(xié)作就是為完成自己的責(zé)任所調(diào)用其它關(guān)聯(lián)類。 23 ? (5)對(duì)設(shè)計(jì)模式有深刻的理解,并能在此基礎(chǔ)上設(shè)計(jì)出適合產(chǎn)品特性和質(zhì)量屬性的框架。 ? (7)嵌入式系統(tǒng)設(shè)計(jì):包括實(shí)施任務(wù)調(diào)度和多任務(wù)設(shè)計(jì)、中斷處理和異常處理、嵌入式系統(tǒng)開發(fā)設(shè)計(jì)等。 ? (7)信息化基礎(chǔ):包括政府信息化與電子政務(wù)、企業(yè)信息化與電子商務(wù)、信息化的有關(guān)的法律和規(guī)定等方面的知識(shí)。 – 了解系統(tǒng)的非功能需求和運(yùn)行維護(hù)需求。 ? 通過(guò)對(duì)比軟件架構(gòu)師和系統(tǒng)分析師在軟件開發(fā)中的職責(zé)和角色,不難發(fā)現(xiàn)軟件架構(gòu)師與系統(tǒng)分析師所必需的知識(shí)體系也是不盡相同的,系統(tǒng)分析師的主要職責(zé)是在需求分析、開發(fā)管理、運(yùn)行維護(hù)等方面,而軟件架構(gòu)師的重點(diǎn)工作是在架構(gòu)與設(shè)計(jì)這兩個(gè)關(guān)鍵環(huán)節(jié)上。 ? 具備戰(zhàn)略性和前瞻性思維能力,善于把握全局,能夠在更高抽象級(jí)別上進(jìn)行思考。1 高級(jí)軟件架構(gòu)設(shè)計(jì) 康凱 Msn: Mail: 2 目錄 ? 第一單元:軟件生命周期與軟件架構(gòu)介紹 2 ? 第二單元:技術(shù)架構(gòu)視圖 ─面向?qū)ο蟪绦蛟O(shè)計(jì)原則與模式 24 ? 用 GRASP模式指導(dǎo)設(shè)計(jì) 27 ? 領(lǐng)域模型 47 ? 面向?qū)ο笤O(shè)計(jì)的基本原則 71 ? 第三單元:用 UML輔助系統(tǒng)分析與設(shè)計(jì) 103 ? UML簡(jiǎn)介及常見(jiàn)疑難問(wèn)題辨析 104 ? 借鑒 RUP的 UML建模與分析 117 ? 第四單元:設(shè)計(jì)模式與軟件設(shè)計(jì)思想 131 ? 設(shè)計(jì)模式 132 ? 常用的軟件架構(gòu)風(fēng)格及適用情況分析 172 ? SOA 及分層架構(gòu)設(shè)計(jì) 212 ? 第五單元:架構(gòu)設(shè)計(jì)實(shí)踐 225 3 第一單元:軟件生命周期與軟件架構(gòu)介紹 4 ? IT行業(yè)的人才結(jié)構(gòu)與軟件架構(gòu)師的定位 ? 軟件架構(gòu)師應(yīng)掌握的知識(shí)體系 ? 軟件架構(gòu)設(shè)計(jì)的特點(diǎn)、層次、分類 ? 軟件架構(gòu)的主要理論、方向和趨勢(shì) ? 軟件工廠,實(shí)現(xiàn)軟件開發(fā)的產(chǎn)業(yè)化 5 軟件架構(gòu)師的定位 ? 系統(tǒng)架構(gòu)師的職責(zé): ? 一、理解系統(tǒng)的業(yè)務(wù)需求,制定系統(tǒng)的整體框架(包括:技術(shù)框架和業(yè)務(wù)框架) ? 二、對(duì)系統(tǒng)框架相關(guān)技術(shù)和業(yè)務(wù)進(jìn)行培訓(xùn),指導(dǎo)開發(fā)人員開發(fā)。 ? 對(duì)項(xiàng)目開發(fā)涉及的所有問(wèn)題領(lǐng)域都有經(jīng)驗(yàn),包括徹底地理解項(xiàng)目需求,開展分析設(shè)計(jì)之類軟件工程活動(dòng)等。因此在系統(tǒng)分析師必須具備的知識(shí)體系中對(duì)系統(tǒng)的構(gòu)架與設(shè)計(jì)等方面知識(shí)體系的要求就相對(duì)低些;而軟件架構(gòu)師在需求分析、項(xiàng)目管理、運(yùn)行維護(hù)等方面知識(shí)的要求也就相對(duì)低些。 – 了解企業(yè) IT 公共設(shè)施、網(wǎng)絡(luò)環(huán)境、外部系統(tǒng)。 ? (8)數(shù)學(xué)和英語(yǔ):至少具有大學(xué)以上的數(shù)學(xué)和英語(yǔ)基礎(chǔ)知識(shí)。 ? (8)系統(tǒng)可靠性分析與設(shè)計(jì):包括系統(tǒng)故障模型和可靠性模型、系統(tǒng)的可靠性分析與可靠度計(jì)算、提高系統(tǒng)可靠性的措施、系統(tǒng)的故障對(duì)策和系統(tǒng)的備份與恢復(fù)等。 ? (6)具有面向?qū)ο蟮姆治?、設(shè)計(jì)和開發(fā)能力,精通 UML和 XML,能熟練使用 Rational Rose、 PowerDesigner等工具進(jìn)行設(shè)計(jì)。 – 值對(duì)象 沒(méi)有標(biāo)識(shí)沒(méi)有行為。 3)脫鉤對(duì)象。 ? 缺點(diǎn): ? DO部分的持久化邏輯被放入 Service層,不夠 OO。充血模型在 domain層實(shí)現(xiàn)的 OO在 Service層又變成了面向過(guò)程。 – 提供聲明型安全,大部分情況下不再搖要編寫安全代碼求( bean部署描述符里的條目指定準(zhǔn)可以防問(wèn)某個(gè)具體 bean)。 ? 應(yīng)用程序通過(guò)將組件的依賴作為 setter或構(gòu)造子參數(shù)傳入來(lái)進(jìn)行組裝 ,而不是之前采用 Java命名和目錄接口 (JNDI )查詢的組件。 EJB只能通過(guò)調(diào)用它的 public 方法如Transter進(jìn)行測(cè)試 ,難度大。 ? 性能要求高的地方。 79 80 81 改善 2 82 例 83 接口隔離原則( ISP) 康凱 84 例 85 使用委托分離接口 86 使用多重繼承分離接口 87 內(nèi)接口與外接口 P a c k a g eI Ou t e rI n n e r P a c k a g eI I n n e r88 普通接口與智能接口 P a c k a g eI N o r m a lI S m a r t89 軟件系統(tǒng)壞死的癥狀 90 “Copy”程序 ? 一個(gè)從鍵盤讀入字符并輸出到打印機(jī)的程序。 //Copy程序的第二次修改結(jié)果 bool ptFlag = false。 ()。 } ? 當(dāng)要實(shí)際尋找影片時(shí),就必須涉及到 MovieFinder 的某個(gè)具體子類。 – 創(chuàng)建合適的 MovieFinder派生類的實(shí)例: ? 不能對(duì)抗此變化。同樣,角色名不應(yīng)該與類的屬性名重復(fù)。 115 用例的一些注意事項(xiàng) ? 是需求分析的第一步。 ? 用例是分層的,一般而言,高層 /中層用例更有實(shí)際意義。 ? 選定分析局部:針對(duì)擬建系統(tǒng)的整體架構(gòu),找出那些蘊(yùn)含相對(duì)高風(fēng)險(xiǎn)的局部作為工作內(nèi)容。本質(zhì)上,職責(zé)是類提供給其他類的 服務(wù)。它們不是內(nèi)聚的,顯然應(yīng)該賦予其他什么類 ─ 可能是類CreditCardCompany、類 Checkout以及類 ReceiptPrinter。先前 ShoppingBasket 的示例是帶有小的和可管理數(shù)目職責(zé)的專注的類的好的示例。 ? 當(dāng)心“偽類” ─偽類其實(shí)是一般的過(guò)程函數(shù),它偽裝成類。 – 在分析中,類代表業(yè)務(wù)事物,而業(yè)務(wù)事物趨向于形成更寬(不超過(guò)三層)的繼承層次。 134 GoF中的模式分類 135 設(shè)計(jì)模式的特點(diǎn) ? 設(shè)計(jì)模式最根本的意圖是適應(yīng)需求變化 – 隔離變化的部分與不變的部分,將之封裝起來(lái)。 137 Log+ W r it e ( )I L o g I n t e r f a c e + E x e c u t e ( )L o g 2 T x t F il e+ E x e c u t e ( )L o g 2 X m lF i le+ E x e c u t e ( )L o g 2 D B+ E x e c u t e ( )138 139 例 ? 我們需要設(shè)計(jì)一個(gè)數(shù)據(jù)庫(kù)組件,它能夠訪問(wèn) Sql Server數(shù)據(jù)庫(kù)。 ? 任務(wù): 。例如在美國(guó)與加拿大。 151 識(shí)別變化 ? 首先識(shí)別出 “ 什么在發(fā)生變化 ” 。 153 橋接模式 154 觀察者( observer)模式 康凱 155 156 命令( mand)模式 康凱 157 ? 意圖 – 將一個(gè)請(qǐng)求封裝為一個(gè)對(duì)象,從而使你可用不同的請(qǐng)求對(duì)客戶進(jìn)行參數(shù)化;對(duì)請(qǐng)求排隊(duì)或記錄請(qǐng)求日志,以及支持可撤消的操作。 158 例子 e x e c u t e ( ) { }c o m m a n d+ e x e c u t e ( )I c o m m a n d+ e x e c u t e ( ) I n t e r f a c . . .c o m m a n d+ e x e c u t e ( )123c o m m a n d+ e x e c u t e ( )4I c o m m a n d+ e x e c u t e ( ) I n t e r f a c . . .I n v o k e r1 . . *159 結(jié)構(gòu) 160 其它設(shè)計(jì)模式 161 ? VISITOR模式 ? 該系列中的模式如下 : – VISlTOR模式 – ACYCLIC VISITOR模式 – DECORATOR模式 – EXTENSION OBJECT模式 162 例 ? 是一個(gè)常見(jiàn)的問(wèn)題:例如 ,有一個(gè) Modem