|
英文原文:Agile and Architecture Conflict
實施敏捷方法和設(shè)計企業(yè)架構(gòu)之間總是存在某種沖突。敏捷開發(fā)強(qiáng)調(diào)隨著對業(yè)務(wù)領(lǐng)域的深入理解,逐步調(diào)整設(shè)計和計劃。架構(gòu)設(shè)計則要求建立起技術(shù)架構(gòu)(technology stack)。它可以滿足質(zhì)量屬性(quality attributes),也可以向感興趣的利益關(guān)系人進(jìn)行展示,作為一種溝通的途徑。當(dāng)使用敏捷方法來引領(lǐng)所需的架構(gòu)設(shè)計的時候,兩者強(qiáng)強(qiáng)聯(lián)手將會是雙贏。
Tom Graves認(rèn)為敏捷需要一個脊柱來支撐。而軟件架構(gòu)提供了這個脊柱。
敏捷通常需要一個脊柱來指引方向——根據(jù)這個方向,推動一些工作的進(jìn)行。這樣做,相對于隨意出牌,可以完成更多的工作。通常,這是個平衡問題——要在堅實的脊柱和敏捷之間有個良好的平衡。
Jan Van Til贊同Tom的觀點,他認(rèn)為沒有后臺的脊柱,前端也很難看得出有多敏捷。
我們當(dāng)然需要一個相對進(jìn)展“緩慢”的“后臺”,這樣才能讓我們看清我們有多敏捷(“前端”)。如果所有的東西都很時尚...我們還能從中識別出哪個是時尚嗎?我們當(dāng)然需要一個有點“緩慢”的“后臺”,這樣才能讓我們看清時尚(“前端”)。換句話說,我們需要傳統(tǒng)的東西,沒有傳統(tǒng)的東西,也就沒有了時尚。
Simon Brown覺得,甚至“絕大部分的敏捷項目”可能都有或大或小的架構(gòu)方面的問題。我們需要在項目早期迭代中解決它們。Simon認(rèn)為,敏捷和架構(gòu)的沖突可以歸結(jié)為是通過短迭代來交付商業(yè)價值,還是做一個龐大的預(yù)先設(shè)計。這里的關(guān)鍵點是設(shè)計要“剛剛好”(just enough)。準(zhǔn)備好一個初步的結(jié)構(gòu)是很重要的,但這不意味著就要畫出無數(shù)的詳細(xì)類圖。
John Bauer則提到,在對幾個項目觀察了一段時間以后,他發(fā)現(xiàn)了一個有趣的模式。
敏捷以及那些類似敏捷的方法有個好處,對于產(chǎn)品來說,它能減少那些架構(gòu)設(shè)計過度的軟件解決方案(over architect-ed software solutions)的產(chǎn)生。架構(gòu)設(shè)計過度的解決方案會強(qiáng)調(diào)軟件應(yīng)用項目的交付,也會使得軟件開發(fā)和維護(hù)的成本上升,通常來說,是跟交付商業(yè)價值背道而馳的。
James Coplien和Kevlin Henney 給我們介紹了一種從項目開始的時候就進(jìn)行“剛剛好”的架構(gòu)設(shè)計,并且確保項目成功的有效方法。
但是,這一切在現(xiàn)實世界里又是怎么實現(xiàn)的呢?
Simon Brown在他的博文中提出了一個有趣的挑戰(zhàn):他要求在4個月左右的時間內(nèi),重新開發(fā)一個程序來取代老邁的在線銀行系統(tǒng) 。他要求大家仍然使用敏捷方法,但最終還是能夠交付。博文中提到了大家提出的一些方案,包括Kero和John Bauer的。你可以查詢到更多的方案,也可以提出你自己的想法。
這樣看來,架構(gòu)設(shè)計和敏捷需要共存。不是有你沒我,而且相互合作。這里的關(guān)鍵點就是做“剛剛好”的設(shè)計。 Simon 定義了“剛剛好”:
做一個“剛剛好”的架構(gòu),可以讓你條理清晰,明確愿景。換句話說,“剛剛好”讓你知道了你的目標(biāo)是什么,你怎么去完成這個目標(biāo)。背后的關(guān)鍵就是架構(gòu)是一個重大的決定,而“重大”是由進(jìn)行改變所需要的成本來衡量的。換而言之,這就是架構(gòu),想要修改真的會很貴,而且你真的必須盡早做出正確的決定。舉個例子,質(zhì)量屬性,比如高性能,高擴(kuò)展性,高安全性以及高可用性,通常都需要在早期就把這些考慮在基礎(chǔ)框架內(nèi),因為想要在后期重新修改現(xiàn)有的基礎(chǔ)代碼庫會很難。這也就是架構(gòu),你不可能在某個下午很簡單地就進(jìn)行重構(gòu),比如核心技術(shù)選擇、架構(gòu)模式、核心框架等。
it知識庫:敏捷和架構(gòu)的沖突,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。