天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

設(shè)計恰如其分的架構(gòu)

  Thoughtworks 的 Sam Newman 在 Mythoughtworks 的 Software Development 小組中給出了 Evolutionary Architecture 的一些資源。其中一個是 Martin Fowler 與 Rebecca Parsons 在 QCon SF 2009 的一次演講,題目為 Agilists and Architects: Allies not Adversaries Presentation 。演講主要談到了在敏捷方法中的架構(gòu)活動(在Martin Fowler的演講中,播放了《黑客帝國》中的一個片段,很有意思)。另一個資源則是同樣作為 thoughtworker 的 Neal Ford 在 IBM developerWorks 發(fā)表的 Evelutionary Architecture and Emergent Design(演進架構(gòu)與緊急設(shè)計)系列。這是很棒的一個講解演進架構(gòu)的系列文章,談到了TDD、代碼復(fù)用、連貫接口、DSL、重構(gòu)、慣用法模式、指標等與演進架構(gòu)和緊急設(shè)計有關(guān)的內(nèi)容。

  事實上,關(guān)于演進式架構(gòu)已經(jīng)是老調(diào)重彈。Martin Fowler 在2004年發(fā)表的文章 Is Design Dead 中談到了計劃式設(shè)計與演進式設(shè)計之間的區(qū)別。在我的書《軟件設(shè)計精要與模式》第一章中,也簡單闡述了我對二者的理解。書中給出了一個建筑學(xué)的隱喻:拙政園與周莊。拙政園是計劃式設(shè)計的典范,沒有詳盡的計劃,也許就不會有疏朗典雅的拙政園。周莊卻并非某人在某一時刻靈感捕捉后的設(shè)計成果,而是經(jīng)歷了數(shù)百年的歷史滄桑,漸進地增添與更替各種建筑,最后形成現(xiàn)在這般靈秀的水鄉(xiāng)風貌。在書中,我寫道:

演進的設(shè)計,同樣需要遵循架構(gòu)設(shè)計的基本準則,它與計劃的設(shè)計唯一的區(qū)別是設(shè)計的目標。演進的設(shè)計提倡滿足客戶現(xiàn)有的需求;而計劃的設(shè)計則需要考慮未來的功能擴展。演進的設(shè)計推崇盡快地實現(xiàn),追求快速確定解決方案,快速編碼以及快速實現(xiàn);而計劃的設(shè)計則需要考慮計劃的周密性,架構(gòu)的完整性并保證開發(fā)過程的有條不紊。

  最近正在閱讀 George Fairbanks 的著作 Just Enough Software Architecture ,書中除了計劃式設(shè)計和演進式設(shè)計之外,還提到了第三種設(shè)計:Minimal planned design(最小計劃設(shè)計),這算是一種中庸之道的選擇。書中認為,演進式設(shè)計需要與一些敏捷實踐配合,包括重構(gòu)、測試驅(qū)動設(shè)計與持續(xù)集成(evolutionary design must be paired with supporting practices like refactoring, test-driven design, and continuous integration.)George 認為計劃式設(shè)計背后隱藏的思想是在構(gòu)造開始之前,制訂的計劃可以設(shè)計出很好的細節(jié)(The general idea behind planned design is that plans are worked out in great detail before construction begins)。他還提到:

當架構(gòu)為并行的多個團隊所共享時,計劃式架構(gòu)設(shè)計就具有實踐意義,在子團隊開始工作之前,這種計劃式設(shè)計頗有效用(Planned architecture design is also practical when an architecture is shared by many teams working in parallel, and therefore useful to know before the sub-teams start working)。

  書中還寫道:(對于多團隊開發(fā)而言)計劃式架構(gòu)定義了高層的組件與連接器,并與局部的設(shè)計相匹配,而子團隊則設(shè)計這些組件與連接器的內(nèi)部模型。架構(gòu)常常會保證整體的不變量與設(shè)計決策,例如建立并發(fā)策略、連接器的標準集、分配高層職責或定義某些局部的質(zhì)量屬性場景(a planned architecture that define the top-level components and connectors can be paired with local designs, where sub-teams design the internal models of the components and connectors. The architecture usually insists on some overall invariants and design decisions, such as setting up a concurrency policy, a standard set of connectors, allocating high-level responsibilities, or defining some localized quality attribute scenarios)。

  至于最小計劃設(shè)計,則介乎于演進式設(shè)計與計劃式設(shè)計之間。支持這種設(shè)計的人認為:如果完全采取演進式設(shè)計,可能會使得設(shè)計走向死胡同;而計劃式設(shè)計又非常難,因為事先對系統(tǒng)并沒有全面的了解,可能導(dǎo)致設(shè)計錯誤。在2002年 Bill Venners 對 Martin Fowler 的采訪中,Martin Fowler 認為,最合理的分配是20%的計劃式設(shè)計,80%的演進式設(shè)計(I think 80 percent of the time evolutionary design works for me as well. )。在 George 的書中,作者認為需要權(quán)衡計劃式與演進式設(shè)計。一種做法是在項目初期進行計劃式設(shè)計,確保架構(gòu)能夠處理最大的風險。之后,就可以通過局部的設(shè)計來應(yīng)對需求的變化,或者采用演進式設(shè)計,通過推行重構(gòu)、測試驅(qū)動設(shè)計與持續(xù)集成對架構(gòu)進行演化。

  整體而言,這三種方式的設(shè)計各有優(yōu)劣,我們應(yīng)根據(jù)具體的場景,具體的項目,具體的團隊進行針對性地分析。應(yīng)該把握“因地制宜”的原則,認識到不同的項目需要不同的設(shè)計方式。對于不同的開發(fā)團隊,做出的選擇也會不同。例如,如果開發(fā)團隊精于重構(gòu)、測試驅(qū)動設(shè)計,并能很好地實施持續(xù)集成,就可以考慮采用演進式設(shè)計或最小計劃設(shè)計。當然,就我個人的意見,比較傾向于 Minimal planned design 。至于它在演進式設(shè)計與計劃式設(shè)計之前的權(quán)衡,不必完全照搬 Martin Fowler 給出的比例。

  在Sam Newman給出的演進式架構(gòu)資源中,還有一篇 coding the architecture 的文章 Just enough architecture 。這篇文章則從方法學(xué)的角度分析來如何獲得恰如其分的架構(gòu)。這是文章中非常漂亮的一幅圖:

  文章以及上圖所表達出來的含義是:傳統(tǒng)的瀑布式采取事先設(shè)計的做法,可以認為是計劃式設(shè)計;敏捷方法學(xué)傾向于演進式設(shè)計;處于其中的RUP則更像是前面提到的最小計劃設(shè)計。文中主要還是關(guān)注我們在架構(gòu)過程中如何做到架構(gòu)的“just enough”。事實上,這一觀點在 George Fairbank s的著作 Just enough software architecture 中被反復(fù)提到,要做到這一點,就需要采用風險驅(qū)動模型(Risk-Driven Model)。RDM的架構(gòu)步驟分為三步:

  1. 識別風險并進行優(yōu)先級排列
  2. 選擇并應(yīng)用相關(guān)技術(shù)
  3. 評估風險是否降低

  其實風險驅(qū)動模型的三個步驟很容易理解,關(guān)鍵是我們應(yīng)該如何識別風險,如何排列優(yōu)先級,又該如何確定解決或控制風險的技術(shù),并進行合理地評估,這是風險驅(qū)動模型的難點。我認為RDM帶來的益處在于它給出了一個非常具有實踐意義的驅(qū)動原則與方法,它告訴架構(gòu)師,當我們在對系統(tǒng)進行架構(gòu)時,需要從一開始就要重視風險,例如系統(tǒng)的安全性、可伸縮性、安全等諸多與質(zhì)量屬性有關(guān)的技術(shù)風險。個人認為:風險驅(qū)動加上場景驅(qū)動,以及技術(shù)約束,就等于敏捷架構(gòu)。大體如下圖所示:

  風險驅(qū)動主要用于處理質(zhì)量屬性相關(guān)的架構(gòu)內(nèi)容,而場景驅(qū)動則用于處理與功能需求相關(guān)的架構(gòu)內(nèi)容,而技術(shù)約束則是架構(gòu)層面,可能是產(chǎn)品線、環(huán)境等能夠?qū)ο到y(tǒng)架構(gòu)產(chǎn)生直接影響的約束因素。至于敏捷架構(gòu)的目標,就是設(shè)計恰如其分的架構(gòu)。

it知識庫設(shè)計恰如其分的架構(gòu),轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 四虎影5151毛片在线看 | 久久亚洲精品AV成人无码 | 日韩高清在线亚洲专区 | 9久久99久久久精品齐齐综合色圆 | 少妇连续高潮抽搐痉挛昏厥 | 久久亚洲精品专区蓝色区 | 恋老视频 国产国佬 | 恋夜秀场支持安卓版全部视频国产 | write as 跳蛋| 好大快用力深一点h视频 | 久久综合伊人 | 亚洲精品久久无码AV片银杏 | 巨爆乳中文字幕爆乳区 | 暖暖高清视频免费 | 噼里啪啦免费观看视频大全 | 亚洲AV人无码综合在线观看蜜桃 | 艳照门在线播放 | 国产三级精品三级在线观看 | 九色PORNY丨视频入口 | 2021精品乱码多人收藏 | 国产精品系列在线观看 | 中国女人精69xxxxxx视频 | a三级黄色片| 好男人视频免费高清在线观看www | 色综合久久五月 | 蜜臀久久99精品久久久久久做爰 | 内射少妇三洞齐开 | 国产学生无码中文视频一区 | 一本色道久久综合亚洲AV蜜桃 | 最新亚洲中文字幕在线观看 | 忘忧草日本在线WWW日本 | 少妇厨房愉情理9伦片视频 少妇被躁爽到高潮无码久久 | 年轻夫妇韩剧中文版免费观看 | 娇妻被朋友玩得呻吟在线电影 | 秋霞电影网午夜一级鲁丝片 | 97成人碰碰在线人妻少妇 | 超碰在线公开视频 | 99久久国产综合色 | 91精品欧美一区二区三区 | 精品国产精品人妻久久无码五月天 | 好男人好资源在线观看 |