1. 程式人生 > >重新審視演進式設計

重新審視演進式設計

說起來,所謂Evolutionary Design已經是老生常談了。早在2004年,Martin Fowler在文章Is Design Dead中就深刻地比較了計劃式設計與演進式設計,至今閱讀這篇文章,對於理解敏捷和演進式設計依舊振聾發聵。我在部落格設計恰如其分的架構中,也算得上是旁徵博引地闡述了諸多與演進式設計相關的理念,例如Neal Ford提出的Emergent Design,George Fairbanks提出的Risk Driven Design,以及Minimal planned design。

然而,有多少人在遵循著Evolutionary Design的理念進行著架構的規劃與設計呢?如果說,架構過程確定無疑地需要不斷地演進,但該如何演進,如何更好地演進,依舊是一個巨大的謎題。Neal Ford提出的諸如發現模式、重構、測試驅動開發等方法,更多地還是停留在微觀架構的層面。而在多數的架構設計過程中,更多地是基於質量屬性,前瞻地去選擇架構風格(抑或架構模式),並參照一些最佳實踐結合自己的場景去驅動出物理架構與邏輯架構。若完全寄情於Last Responsible Time,期待著通過對架構重構讓已有軟體系統煥然一新,畢竟代價太大,對架構師的能力也要求太高。

正如Martin Fowler對架構的定義:

架構是重要的事物,無論它是什麼。架構是以後很難更改的內容。

既然很難更改,我們為何不能一蹴而就?然而,Neal Ford又告訴我們:未來是不可預測的。於是之,我們並不能以無知的未來妝點當下,否則會導致設計過度,甚至南轅北轍。雖然一路向北,終究能返歸南方,可惜路漫漫其修遠兮,沒有人願意等待,也不值得等待。

在Agile China 2013年,我在ThoughtWorks的同事Scott Shaw與賈陽聯袂演出了一臺戲,戲名喚作Evolving Architecture For Change,以一個真實案例闡釋我們如何演進客戶系統的架構。演講從Evolving Path、Technical Enables與Culture Enables三個方面全面細緻地介紹了架構的演進之路。概而言之,用到的方法與理念包括:

  • 通過Bounded Context識別Domain Service
  • 基於RESTful的Micro Service架構
  • 自動化的Consumer Driven Contract Test
  • 自動化部署與部署流水線(Deployement Pipeline)
  • 組建特性團隊(Feature Team)
  • 重視交流,將架構師視為Facilitator,通過視覺化手段引導設計

演進之前的架構是一個簡單分割的分散式架構,Front End面向客戶的使用者,而Office End則面向業務人員和系統管理者。整個系統的模組邊界非常模糊,整合複雜,程式碼庫龐大而混亂,存在大量重複程式碼。


採用上述方法對系統架構進行演進,最終形成了如下圖所示的基於RESTful的圍繞Domain Service為中心的類微服務架構:


然而,嚴格意義上講,這個案例的架構演進屬於針對已有系統(或遺留系統)架構進行重構的範疇,而非從頭開始搭建架構的演進式設計。

最近讀到Joshua Kerievsky的文章Evolutionary Design,他提倡架構設計從Primitive Whole開始,勿求功能做到最深最全,而是以“廣度優先”的演算法思想在最初的設計中覆蓋整個系統的全部組成部分。如下圖所示的吉他設計:


迭代1設計的吉他根本不可用,但基本的組成元素已經初具模型,雖然它不能工作,但任何人看到這個模型,也不會認為它是小提琴或者二胡。

如此設計的好處在於可以提前發現團隊協作與元件整合的風險。因為前期迭代的功能鋪得極廣,就像八爪魚一般延伸到了系統的每一枝節(這些枝節卻沒有一片樹葉),雖然極度粗糙簡陋,但團隊已經可以開始協作開發,系統的整合點也被提前發現了。

協作問題是管理風險,整合問題是技術風險,二者都是導致軟體開發延期的主要魁首。雖然只是邁出了第一步,但這一步邁得紮實,邁得穩當,之後就可以以更加穩健步伐前進,庶幾實現“較少修改”的架構。


運用六邊形架構可以有效地識別系統關注點,從架構層面(全域性視角)設計,暫時可以不考慮實現細節。六邊形架構這種內外分離的方式,可以有效地把系統的核心領域與邊界外的基礎設施隔離開,從而形成一種獨立於框架,易於測試,與外部代理、UI以及資料庫無關的應用架構(符合Robert Martin提出的Clean Architecture)。與演進式設計結合起來,可以很好地幫助我們識別整合點,以更廣而非更深地視角俯瞰系統架構。

演進式設計是一種理念,它曾經顛覆過傳統笨拙的計劃式設計,如今,它依舊煥發著生命力,但我們不能以靜止的眼光去看待它,而應該嘗試著引入一些新的方法、框架乃至技術——於是,演進式設計這舊瓶就能裝著新酒,既散發出釅釅的酒香又不至於濃洌得燻人欲醉!

相關推薦

重新審視演進設計

說起來,所謂Evolutionary Design已經是老生常談了。早在2004年,Martin Fowler在文章Is Design Dead中就深刻地比較了計劃式設計與演進式設計,至今閱讀這篇文章,對於理解敏捷和演進式設計依舊振聾發聵。我在部落格設計恰如其分的架構中,也算得上是旁徵博引地闡述了諸多與演進式

一文帶你重新審視CAP理論與分散式系統設計

這是一篇來自微信公眾號的文章,如果圖片看不到,可直接跳轉到文章出處檢視:https://mp.weixin.qq.com/s?__biz=MzI4NTA1MDEwNg==&mid=2650765365&idx=1&sn=75c9b2050c31

響應設計:理解設備像素,CSS像素和屏幕分辨率

rtk mos ava hdr nsq gms sco dpt nsca 概述屏幕分辨率、設備像素(device-width)和CSS像素(width)這些術語,在非常多語境下。是可互換的,但也因此easy在有差異的地方引起混淆,實際上它們是不同的概念。屏幕分辨率和設備像

不用媒體查詢做web響應設計-遁地龍卷風

tar pre mon ora out sans tle doctype control (0)寫在前面  講述知乎上看到的一篇文章中的一個案例,讓我腦洞大開,佩服至極,特意第二天找到原文贊賞了 5元,原文地址https://zhuanlan.zhihu.com/p/2

服務動態分配的分布設計

比較 通過 動態加載 ges 加載 分布式 ron http strong 今天自己腦洞了一種負載均衡的方案,各自處理業務邏輯的服務器不再像以往一樣需要部署各自不同的業務服務,而是統一由一個服務器管理調度。也就是說子服務在脫離了調度服務器就是一個空殼,不處理任何邏輯,只有當

響應設計的5個css實用技巧

mda ota .html tk1 tmx htm cool http lec mongodb30%E6%AD%A3%E5%BC%8F%E7%89%88%E5%8F%91%E5%B8%83 http://www.zcool.com.cn/collection/ZMTY4O

最全的響應設計資源庫

兼容 blog asc coder 網頁 ids group external 但是 閱讀本文需 8 分鐘 響應式設計起源:Ethan Marcotte在2010年寫了一篇響應式的文章,宣揚這種新式的網頁設計思想,經過3年的發展,響應式設計得到了眾多設計師的認可。

學習響應設計(Learning Responsive Web Design)完整版PDF

方向 作用 技術 避免 布局 肩膀 .com img 臺式電腦 想要為平板、手機、筆記本、大屏幕設備,甚至可穿戴設備提供最優的用戶體驗?那就學習響應式設計吧。這是一本內容特別全面、講解非常透徹的入門書。特別地,通過這本書不僅能迅速掌握響應式Web設計的基本原理,還能夠從頭到

Java語言編程學習之Lambda表達設計和架構的原則[圖]

成了 好的 不同的 water 程序猿 如果 lam 如何 ges Java語言編程學習之Lambda表達式設計和架構的原則[圖]:大家都知道,Lambda表達式是對Java語言的一點簡單改進,在JDK標準類庫中,運行它的方式各種各樣。但是大多數的Java代碼都不是由開發J

CSS響應設計基礎

響應式 Web 設計 - Viewport 什麼是 Viewport? viewport 是使用者網頁的可視區域。 viewport 翻譯為中文可以叫做"視區"。 手機瀏覽器是把頁面放在一個虛擬的"視窗"(viewport)中,通常這個虛擬的"視窗"(viewport)比螢幕寬,這

Rethinking ImageNet Pre-training 重新審視Imagenet預訓練

Rethinking ImageNet Pre-training   2018年ECCV 論文地址:https://arxiv.org/pdf/1811.08883.pdf 本論文是何凱明大神的一篇論文,主要是討論了Imagenet預訓練和隨機初始化引數之間的區別。 論文摘要:

看好雲端計算及資料領域 外資投行重新審視中概科技股

11月29日訊息,@北京商報從度小滿金融人士處獲悉,百度正式拿到准許經營證券期貨的許可證。據許可證顯示,機構名稱為北京百度百盈科技有限公司(下稱“百度百盈”),證券期貨業務經營範圍為基金銷售。而今年8月22日,根據北京證監局官網顯示,證監局已核准百度百盈證券投資基金銷售業務資格。 企查查資訊顯示,百度百盈成

從內部自用到對外服務,配置管理的演進設計優化實踐

本文整理自阿里巴巴中介軟體技術專家彥林在中國開源年會上的分享,通過此文,您將瞭解到: 微服務給配置管理所帶來的變化 配置管理演進過程中的設計思考 配置管理開源後的新探索 配置中心控制檯設計實踐 “為什麼相對於傳統的軟體開發模式,微服務要強調配置中心,是出於什麼樣的訴求需要我們

前端開發響應設計之媒體查詢(bootstrap)

媒體查詢就是可以根據裝置顯示器的特性(視口寬度、螢幕比例、裝置方向-橫向或者豎向等)為其設定CSS樣式 為什麼響應式設計需要媒體查詢?因為沒有CSS3的媒體查詢模組,就不能針對裝置特性(尤其是視口寬度)設定特定的CSS樣式 bootstrap.css檔案最後的若干

響應設計——initial containing block、viewport以及相關尺寸

在閱讀這篇文章之前,你需要了解裝置畫素、邏輯畫素(裝置獨立畫素)和CSS畫素的區別,見我的前一篇文章。 layout viewport 包含了頁面中的所有內容,瀏覽器已經計算好了layout viewport中的所有樣式。 visual viewport 使用者

Css響應設計

什麼是響應式 Web 設計? 響應式 Web 設計網頁應該根據裝置的大小自動調整內容。 響應式 Web 設計只使用 HTML 和 CSS。 響應式 Web 設計不是一個程式或Javascript指令碼。 Viewport 是使用者網頁的可視區域。 網格檢視 響應式網格

5個常見響應設計陷阱及解決方案

1. 引言 2. 正文 2.1 引入 想象這樣的場景: 您剛剛建立了一個傑出的響應式設計,然後準備在移動裝置中測試一下。在您意想不到的地方產生了一些問題,文字亂糟糟的,動畫波濤洶湧,表單沒有呈現您設計的樣式。然後花費N多時間修復這些問題,您可能抓狂地把電腦扔出窗外砸中鄰居家的

響應設計-VS-REM佈局

水平有限,不對之處還請指出。 【目前幾種佈局】 隨著移動網際網路的發展和微信的突起,移動端的響應式佈局越來越重要了。 目前網站佈局有以下幾種: 1.定寬度佈局 很多pc的網站都是定寬度佈局的,也就是設定了min-width, 這樣一來,如果小於這個寬度就會出現滾動條,

避免3種響應設計災禍

響應式設計方法對開發者非常有用,因為它使我們的內容在各種裝置上廣為傳播。不用保留幾個獨立版本的網站,也可以摒除諸如縮放和流式佈局這些方法的弊端。 本文重點討論設計師遇到最多的3個響應式設計問題,也會提供一些規避錯誤的策略。 縮放、流式佈局與響應式 這些術語容易造

【特別推薦】14個支援響應設計的流行前端開發框架

  在幾年前,並沒有真正意義上的前端開發。隨著網路技術的發展,網站和 Web 應用程式變得越來越複雜,前端部分的工作獨立出來逐漸成為現在的前端開發。如今,我們可以看到越來越多的公司在招聘前端開發崗位。   前端開發並不容易,除了掌握基本的 HTML、CSS 和 Javascript 之外,因為不同版本的瀏覽