了解不同的面向服務的體系結構 (SOA) 反模式,這些反模式對通常出現的會產生確定性負面結果的情形或解決方案進行了描述。隨著越來越多的企業開始大舉從 Web 服務轉向 SOA,引入、采用和成功實現 SOA 方面的各種障礙變得越來越明顯。其中一些障礙與導致過去的關鍵活動失敗的因素類似;而其他障礙則是 SOA 特有的。對這些障礙和最差實踐進行記錄,將幫助顧問、架構師和專業人員不再犯同樣的錯誤,并學習如何避免這些問題的發生。此處匯集和說明的反模式是由作者通過作為 IBM 架構師的個人經驗、研究過去和當前的 SOA 應用案例以及通過分析那些參與客戶 SOA 應用的技術先驅提供的信息而得到的。
模式與反模式
“示例不是另一種學習的方法,而是學習的唯一方法?!薄栘愄?#8226;愛因斯坦
模式和模式語言捕獲并正式地將良好設計和基于經驗的最佳實踐系統化,以供其他人員對其進行重用。它們成功而清楚地表述了常見問題及其解決方案??偟膩碚f,常見概念、描述這些概念的詞匯以及將其聯系在一起的語言是所有采用這些設計和實踐的學科和領域的基礎。
Christopher Alexander 關于建筑物和城市設計的研究通常被認為是基于模式的思維最早的成果(請參閱參考資料)。他提出了術語“模式語言”,以此代表他認為人類進行設計的能力和使用語言的能力都是天生的這一信念。
很多學科都在使用模式和模式語言的概念,包括從生理學和流程到項目管理和軟件工程等領域。在 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides(經常將他們稱為 Gang of Four)的“Design Patterns: Elements of Reusable Object-Oriented Software”一書出版后,軟件設計模式得到了廣泛的認可和使用。
軟件社區目前正使用模式來解決在軟件生命周期中遇到的不斷重復的問題,包括軟件體系結構和設計,以及近來的軟件開發流程和拓撲。這些模式全面捕獲了一個知識體系,以標識我們對可以實現設計良好的軟件解決方案的結構和機制的理解。
模式經常被定義為“泛型化的、命名的問題到解決方案的映射”。它捕獲在特定環境中重復出現的問題的成功解決方案。
通常使用與表 1“模式模板”中描述的模板類似的模板來記錄軟件模式。
表 1. 模式模板
內容 | 說明 |
名稱: | 用于進行標識的名稱 |
問題: | 在領域中重復出現的問題 |
解決方案: | 該問題的最佳實踐解決方案 |
結果: | 所建議的解決方案的優點和缺點 |
示例 | 一些已經應用了所建議的解決方案的示例 |
軟件模式提供了一個在架構師和設計人員中捕獲知識和經驗的機制。它們提供了一種公共語言,可促進對其他地方成功應用的方法的重用,從而為軟件項目帶來以下方面的好處:風險更低、質量更好且交付時間更短。
而在另一方面,反模式則記錄出現錯誤的情況。對數百個軟件開發項目的各種調查勿庸置疑地證明了軟件開發會出現錯誤(實際上經常是這樣)。研究表明每六個項目中就有五個會不成功:交付遠遠超過預期預算、嚴重滯后或被取消。這就表明可能(至少)值得投入精力研究一下老是失敗而很少成功的原因(注意 Bitter Java 的作者 Bruce Tate 在他的 developerWorks 文章中說明了為什么反模式是設計模式的必要和互補的同伴——有關更多信息,請參閱參考資料)。
應該對這些重復失敗的軟件開發項目或“反解決方案”加以研究,以收集關于出現了什么問題以及為什么會這樣的有用知識。很顯然,只對錯誤的原因進行分類并不一定非常有用,而還應研究如何加以避免以及出現時如何恢復。系統化后,這個知識集合可以提供軟件模型的有價值的擴展(歸類為反模式)。
反模式 使用非常頻繁,但主要是問題的無效解決方案。這個術語最初是用于指示設計模式出現了錯誤。與模式類似,反模式的使用也擴展到了軟件開發的各個階段,并深入到了其他領域中。反模式記錄常見的對效率有負面影響的重復解決方案。它們通常捕獲重構解決方案描述,說明如何更改反模式,以得到更為穩定的解決方案。反模式通常使用模板進行描述,在其中標識癥狀、結果、根本原因和可能的解決方案。盡管與模式相比,反模式的研究并不很廣泛,相關文檔也不多,但軟件領域對其中一些具有引人矚目的反模式(如分析停頓、Blob、意大利面條式代碼和“煙囪”系統)已耳熟能詳。表 2 提供了一些這些示例的概述,這些示例均摘自 Brown 等的關于反模式的書中(有關更多信息,請參閱參考資料部分)。
表 2. 已知反模式的示例
錯誤類別 | 反模式 | 描述 |
設計 | Blob | 一個大型類具有太多的屬性,且是系統的“核心”所在 |
設計 | Poltergeists | 非必要類且抽象過多 |
結構 | 意大利面條式代碼 | 程序代碼沒有結構(很多 goto 語句) |
結構 | “煙囪”系統 | 應用程序是唯一的也是孤立的 |
技術 | Wolf ticket | 聲明具有開放性的技術并與標準測試不相符 |
技術 | 不斷退化模式 | 試圖使用最新的版本 |
重用 | 剪切與粘貼 | 軟件錯誤被復制 |
重用 | Golden hammer | 強制所有內容適應一個選定的工具 |
反模式為什么重要?反模式是用于防止問題的工具,可在問題出現之前對其進行標識,并能提供關于如何防止其發生的知識。通過將錯誤原因正式地系統化,我們可以更容易對其加以理解。一旦出現問題,反模式可以提供幫助,能說明如何從其進行恢復。
簡要總結一下,反模式包括以下元素:
圖 1 說明了模式和反模式之間的區別。模式從試圖解決的問題開始,記錄針對此問題的可重復成功解決方案。此解決方案可帶來一些好處、相應的結果以及可能會有一些問題。反模式說明對效率具有負面影響的常用的問題解決方案。它描述導致出現問題的原因,并說明如何防止或對解決方案進行修正。
圖 1. 模式與反模式(摘自 Brown 等的“AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis”)
共4頁: 1 [2] [3] [4] 下一頁 |