日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

架构重构:通过以任务为中心的视角看软件的进化

發(fā)布時間:2024/3/13 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 架构重构:通过以任务为中心的视角看软件的进化 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文最初發(fā)表在IEEE軟件雜志上,IEEE軟件雜志致力于發(fā)表嚴謹?shù)摹⒔?jīng)過互相審校的文章,專注于當今世界的戰(zhàn)略科技。為了滿足運行可靠且靈活企業(yè)所面臨的挑戰(zhàn),IT經(jīng)理和技術(shù)管理者依賴IT Pro獲取最先進的解決方案。

\\\\

軟件密集型的系統(tǒng)經(jīng)常會因為各種各樣的原因而必須進行重新設(shè)計,例如某個不可預(yù)知的業(yè)務(wù)變動或是技術(shù)上的創(chuàng)新。許多重新設(shè)計活動會對這些系統(tǒng)的軟件架構(gòu)產(chǎn)生影響,代碼重構(gòu)就是一種流行的重新設(shè)計實踐。考慮到代碼成功這一實踐的巨大成功,這使人們對于架構(gòu)重構(gòu)(AR)這種實踐的沉默感到有些吃驚。為了糾正這一情形,我將在本文中為讀者展示,作為一種軟件進化技術(shù),AR如何重新審視架構(gòu)決策,并確認相關(guān)的設(shè)計、實現(xiàn)及文檔任務(wù)。

\\

介紹架構(gòu)重構(gòu)

\\

重構(gòu)的目的是在改善某部分質(zhì)量的同時保持其它部分不變,舉例來說,代碼重構(gòu)實踐對代碼的結(jié)構(gòu)進行了重新調(diào)整,以增強代碼的可維護性,同時又保持它的可觀察行為不變。代碼重構(gòu)實踐是與機器可讀的實體進行打交道,例如包、類以及方法,讓這些實體能夠在編譯器構(gòu)造階段利用各種數(shù)據(jù)結(jié)構(gòu),例如抽象語法樹1。而AR則是與架構(gòu)文檔和架構(gòu)知識在代碼與運行時產(chǎn)品中所表現(xiàn)出的行為打交道。因此,不存在一種單一的架構(gòu)語法樹。AR的范疇包括:

\\
  • 組件與連接器(經(jīng)過建模、描繪或在代碼中隱式地表現(xiàn)出來),\\t
  • 設(shè)計決策的記錄(以結(jié)構(gòu)化和非結(jié)構(gòu)化的文本表現(xiàn)),以及\\t
  • 計劃階段的產(chǎn)物,例如項目管理工具中的工作項。\

AR能夠找出架構(gòu)中的壞味道,這種壞味道暗示著架構(gòu)中的某部分對于目前的需求與約定來說已經(jīng)不再適用,而這些需求比起從前可能已經(jīng)產(chǎn)生了某種變化。從這一層意義上說,AR是一種將經(jīng)過深思熟慮的架構(gòu)活動進行整理后的集合,它能夠去除某種特定的架構(gòu)壞味道,能夠在不影響系統(tǒng)的范圍與功能的情況下,對系統(tǒng)中至少一方面的質(zhì)量特性加以改進。而由于矛盾的需求與權(quán)衡因素的存在,AR也可能會對其它質(zhì)量特性帶來負面的影響。

\\

在我看來,AR的過程就是對某個架構(gòu)決策進行重新審視2,并為某些設(shè)計問題的集合提供一種不同的解決方案。決策的執(zhí)行牽涉到多個相關(guān)的工程任務(wù),它們可以被歸類為以下幾種:

\\
  • 認識到某個設(shè)計中的結(jié)構(gòu)性變化的任務(wù)。這種變化的范圍比起代碼重構(gòu)更大,它需要與組件、子系統(tǒng)以及系統(tǒng)的系統(tǒng)(和它們的接口)打交道。\\t
  • 在開發(fā)與運維過程中的實現(xiàn)與配置任務(wù)(取決于AR的視角)。\\t
  • 文檔與交流任務(wù),例如建模活動、技術(shù)寫作工作、或技術(shù)研討會的準備與促進。\
\\t\t\t

AR名稱

\\\t\t\t\\\t\t\t

如何能夠輕易地認出某個AR并進行引用?

\\t\t\t
\\t\t\t

SQL

\\t\t\t
\\t\t\t

背景

\\\t\t\t\\\t\t\t

該AR適用于的場景(以及所處的條件)是什么?

\\t\t\t
\\t\t\t

從功能性的觀點與信息的觀點這兩者的角度對概念級別(數(shù)據(jù)庫范式)以及資產(chǎn)級別(MySQL與MongoDB)進行抽象。

\\t\t\t
\\t\t\t

項目干系人的關(guān)注點

\\\t\t\t\\\t\t\t

該AR會影響到哪些非功能性需求以及約束(包括質(zhì)量特性及設(shè)計外力)?

\\t\t\t
\\t\t\t

靈活性(從數(shù)據(jù)模型變更的角度)、數(shù)據(jù)完整性,以及遷移時間。

\\t\t\t
\\t\t\t

架構(gòu)壞味道

\\\t\t\t\\\t\t\t

在何時,以及為什么要考慮該AR?

\\t\t\t
\\t\t\t

當數(shù)據(jù)模型(數(shù)據(jù)庫架構(gòu))產(chǎn)生變動時,將現(xiàn)有的數(shù)據(jù)庫內(nèi)容進行遷移所需的時間太長。

\\t\t\t
\\t\t\t

需要重新審視的架構(gòu)決策

\\\t\t\t

與該AR相關(guān)的設(shè)計問題有哪些,目前采取了哪些設(shè)計方式以處理這些問題?

\\t\t\t
\\t\t\t
  • 數(shù)據(jù)建模的范式的選擇(目前的決定是關(guān)系型數(shù)據(jù))\\t\t\t\t
  • 元模型及查詢語言的選擇 (目前的決定是SQL)\\t\t\t\t
  • 數(shù)據(jù)庫管理系統(tǒng)的選擇 (目前的決定是MySQL)\\t\t\t
\\t\t\t

改進輪廓 (解決方案的簡介)

\\\t\t\t

現(xiàn)在應(yīng)當選擇哪些設(shè)計選項?

\\\t\t\t

解決方案的目標看起來是怎樣的?

\\t\t\t
\\t\t\t
  • 使用面向文檔的數(shù)據(jù)庫,例如MongoDB以取代關(guān)系型數(shù)據(jù)庫,例如MySQL。\\t\t\t\t
  • 對事務(wù)管理與數(shù)據(jù)庫管理進行重新設(shè)計。\\t\t\t
\\t\t\t

受影響的架構(gòu)元素

\\\t\t\t

哪些設(shè)計模型元素必須進行改動(例如被顯式建模的組件與連接器)?

\\t\t\t
\\t\t\t
  • 數(shù)據(jù)庫層(包括服務(wù)器進程、備份與恢復(fù)功能)。\\t\t\t\t
  • 數(shù)據(jù)訪問層 (例如命令與查詢的模式,以及連接池)。\\t\t\t
\\t\t\t

執(zhí)行任務(wù)

\\\t\t\t

如何應(yīng)用并驗證該AR?

\\t\t\t
\\t\t\t
  • 設(shè)計文檔布局 (需要機器可讀的SQL數(shù)據(jù)定義語言)。\\t\t\t\t
  • 編寫一個新的數(shù)據(jù)訪問層,并在應(yīng)用中實現(xiàn)類SQL的查詢功能。\\t\t\t\t
  • 決定事務(wù)邊界(如果存在的話)。\\t\t\t\t
  • 對數(shù)據(jù)庫管理變更進行文檔化(例如命令行查詢、更新腳本以及備份過程)。\\t\t\t\t
  • 根據(jù)成功標準(例如遷移時間與數(shù)據(jù)訪問層的性能),對新舊兩套方案進行對比。\\t\t\t

表1. 某個架構(gòu)重構(gòu)(AR)的結(jié)構(gòu)化表現(xiàn)。

\\

我所設(shè)計的以決策和任務(wù)為中心的AR視圖是對Michael Stal的觀點的一種補充與擴展,他在2007年發(fā)表了關(guān)于AR的第一份目錄3。為了對他的AR進行文檔化,Stal使用了一種簡單的模式格式,其中包括三個部分:背景、問題與一般方案意見。他所描述的AR包括“打破依賴循環(huán)”以及“切分子系統(tǒng)”,分別對應(yīng)了“依賴循環(huán)”與“功能切分不充分”這兩種架構(gòu)上的壞味道4

\\

以任務(wù)為中心的模板的示例

\\

Doodle.com的首席技術(shù)官在他們的博客上解釋了他們?yōu)槭裁匆獜腗ySQL遷移到MongoDB的原因,這是在他們的協(xié)作型在線日程設(shè)定服務(wù)上線使用多年后所做出的一個決定。在這個案例中的架構(gòu)壞味道在于,一旦SQL架構(gòu)產(chǎn)生變化(例如在某張表中加入新的一列),對大型的生產(chǎn)環(huán)境中的數(shù)據(jù)庫進行遷移的過程耗時極長。受到影響的質(zhì)量特性包括開發(fā)與運維的生產(chǎn)力,以及數(shù)據(jù)庫和數(shù)據(jù)訪問層的性能與可伸縮性。而這種壞味道的癥結(jié)在于,關(guān)系型數(shù)據(jù)庫管理系統(tǒng)本身就不是為了應(yīng)對這種使用場景而設(shè)計的,雖然它們能夠勉強處理這種需求,但并非最佳選擇。

\\

他們所采用的方案是對架構(gòu)方面的決策進行重新審視,這些決策包括數(shù)據(jù)庫范式、查詢API以及數(shù)據(jù)庫provider。技術(shù)官最終決定使用面向文檔的范式,這也是無架構(gòu)的NoSQL技術(shù)中的其中一種,并使用MongoDB作為文檔數(shù)據(jù)庫的實現(xiàn)。這一變化改進了遷移管理的同時,也帶來了管理與代碼方面的成本,他們需要為此編寫新的數(shù)據(jù)訪問、事務(wù)以及備份管理方面的新方案。

\\

Doodle的示例體現(xiàn)了一次成功的AR,因為它通過對某個架構(gòu)決策進行重新審視,改善了某方面的質(zhì)量特性,而并不包括代碼的重構(gòu)。表1以結(jié)構(gòu)化的方式展現(xiàn)了這個AR過程,使它更容易理解,并能夠應(yīng)用到類似的項目中。這一示例也提供了一個AR文檔模板的建議,表1中的每一行都是模板中的一個條目。圖1展示了模板結(jié)構(gòu)的結(jié)果。

\\

在使用表1中展現(xiàn)的模板對你自己的AR進行文檔化時,要注意AR名稱應(yīng)當具有表達性,例如某種隱喻。與通常使用名詞的模式名稱不同,AR名稱應(yīng)當是動詞,例如在代碼重構(gòu)過程中所使用的名稱。背景部分可以包含軟件工程方法中的抽象級別信息,或者是企業(yè)架構(gòu)管理框架中的觀點。由于AR描述了一種設(shè)計上的變化,因此可以提供兩種方案的簡介,即應(yīng)用AR前的設(shè)計以及應(yīng)用AR之后的設(shè)計。架構(gòu)元素與結(jié)構(gòu)化設(shè)計之間建立了一種鏈接,這種鏈接可以被顯式地建模、非正式的描述或在代碼中進行隱式的表述。任務(wù)描述這部分可以引述敏捷計劃工具或軟件工程活動中的工作項。某些執(zhí)行任務(wù)是可以被自動化的(正如在許多代碼重構(gòu)過程中的執(zhí)行一樣),但并非所有任務(wù)都可以,因為AR是在一個更高的抽象層面的過程,它的范圍已超過了代碼重構(gòu)。

\\

\\

圖1. 某個架構(gòu)重構(gòu)的解剖圖。左邊的部分展示了在某個特定上下文(例如視角或抽象級別)中觀察到的架構(gòu)壞味道,這屬于某種質(zhì)量特性(QA)方面的關(guān)注點。右邊的部分簡述了經(jīng)過重構(gòu)后的架構(gòu),并確認了相關(guān)的設(shè)計、實現(xiàn)以及文檔任務(wù)。而需要重新審視的架構(gòu)決策而扮演了這兩部分之間的粘合劑。

\\

架構(gòu)重構(gòu)目錄

\\

讓我們將目光放遠一點,來看看一些其它的AR。表2以兩個維度列舉了基本的AR,分別是架構(gòu)的角度與變更的類型。這些AR可以被表示為圖1中的以任務(wù)為中心的模板實例。舉例來說,“引入緩存”這一任務(wù)的具體工作包括決定一個查找鍵、緩存失效策略、緩存的分布等等。

\\

在今后,還有可能出現(xiàn)特定于某個領(lǐng)域與風格的AR目錄,可能會用于金融服務(wù)軟件、游戲開發(fā)或云計算。舉例來說,對于企業(yè)的應(yīng)用現(xiàn)代化,以下三種AR都可以屬于這一目錄。

\\

將會話狀態(tài)管理功能轉(zhuǎn)移(例如,從客戶端或中間服務(wù)器轉(zhuǎn)移至數(shù)據(jù)庫,以改善水平伸縮的能力,并更好地利用云的彈性)。

\\
  • 在某個服務(wù)接口契約中,使用數(shù)據(jù)遷移對象取代標量參數(shù)(以減少遠程調(diào)用的次數(shù))。\\t
  • 簡化某個Web客戶端(以減少客戶端的負荷,增加它的處理能力)。\\t
  • 基本的AR與特定的AR都能夠提供一種跨社區(qū)的協(xié)作方式,協(xié)作雙方可以包括:\\t
  • 架構(gòu)與開發(fā)。AR的執(zhí)行可能會包括一次或多次代碼重構(gòu)的實踐,這部分工作也必須統(tǒng)一規(guī)劃。\\t
  • 架構(gòu)與項目管理。根據(jù)AR模板所組織的AR描述可以作為計劃中的任務(wù),對于AR的需求就意味著某種技術(shù)債的現(xiàn)形。\\t
  • 架構(gòu)與運維(ArchOps)。從部署的角度來看,可以將AR視為一種溝通的方式。\

\\

表2. 視角、AR類型,以及對應(yīng)的AR。

\\

如何高效地共享并執(zhí)行AR,這一點還有待觀察。模板與目錄是否能夠有效地承載這些知識,還是說建模與協(xié)作工具更適合于這一場景呢?基于Web交付的知識具有天然的競爭力,這已經(jīng)通過Wikipedia得到了證明。代碼重構(gòu)任務(wù)可以通過閱讀書籍及正式的基礎(chǔ)著手,而重構(gòu)工具(例如Eclipse中的工具)是在很久之后才開發(fā)出來的,此時已經(jīng)存在了豐富的內(nèi)容,建立了完整的理論,人們也獲得了大量的經(jīng)驗。對于AR工具的支持同樣需要與建模工具相配合,這些建模工具能夠支持UML或架構(gòu)描述語言,但這種支持能力目前還沒有看到。

\\

致謝

\\

感謝來自拉珀斯維爾的東瑞士應(yīng)用科學(xué)大學(xué)的Christian Bisig與Mirko Stocker,他們對本文的原始版本進行了審校。同樣感謝曾出席我在OOP 2014與GI FG SWA 2014會議上的演講的聽眾,在演講中我介紹了對云服務(wù)進行架構(gòu)重構(gòu)的方式,他們的反饋對我?guī)椭艽蟆?/p>\\

引用

\\
  • M. Fowler于2004年9月1日所發(fā)表的博文“重構(gòu)的定義”(Definition of Refactoring)。\\t
  • O. Zimmermann于IEEE Software雜志2011年第28期第一卷中的64-69頁中的文章,“將架構(gòu)決策視為可重用的設(shè)計資產(chǎn)” (Architectural Decisions as Reusable Design Assets)。\\t
  • M. Stal于2007年發(fā)表的“軟件架構(gòu)重構(gòu)”(Software Architecture Refactoring)。\\t
  • M. Stal與M. Babar、A. Brown、I. Mistrik、Morgan Kaufmann于2013年于敏捷軟件架構(gòu)第一期所發(fā)表的“重構(gòu)軟件架構(gòu)”(Refactoring Software Architecture)。\\t
  • P. Sevin?于2011年4月14日所發(fā)表的博文“Doodle技術(shù)面面觀” (Doodle’s Technology Landscape)。\
  • 關(guān)于作者

    \\

    Olaf Zimmermann是拉珀斯維爾的東瑞士應(yīng)用科學(xué)大學(xué)軟件協(xié)會的一名教授與合作伙伴,可以通過ozimmerm@hsr.ch聯(lián)系他。

    \\\\

    本文最初發(fā)表在IEEE軟件雜志上,IEEE軟件雜志致力于發(fā)表嚴謹?shù)摹⒔?jīng)過互相審校的文章,專注于當今世界的戰(zhàn)略科技。為了滿足運行可靠且靈活企業(yè)所面臨的挑戰(zhàn),IT經(jīng)理和技術(shù)管理者依賴IT Pro獲取最先進的解決方案。

    \\\\

    查看英文原文:Architectural Refactoring: A Task-Centric View on Software Evolution

    總結(jié)

    以上是生活随笔為你收集整理的架构重构:通过以任务为中心的视角看软件的进化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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