软件架构设计_给非专业人士介绍——软件架构设计工作
軟件架構設計
? ? ? ? 架構設計是高層設計,是設計決策之上的決策。它為決策引入的額外的約束,這種約束不產生立即可見的效果。
????????用一個例子來輔助我們的表述。比如你買了一間新房子,有5個房間,你的床放哪里?書柜放哪里?馬桶放哪里?微波爐放哪里?(允許先假定哪里都有下水管道之類的設施)
????????如果按眼前的決策,剛進來的時候,哪里都能放。而且,這個判斷最快了。但等你在床旁邊安裝了一個馬桶?;蛘呙總€房間都安排了書柜,導致想放張大一點的床都放不下的時候,那就不由得感慨:早知道就……了。
????????那么提前決定買多大的房子,房子有多少房間,不同的房間是什么功能,就是架構設計工作要做的工作了。
01
? ? ? 架構工作呈現為約束。你搬一個微波爐進來,看見有塊空地,你覺得就應該放下來了,這毫無約束。但架構工作會給你增加額外的約束——“你不能放這里,你必須放到那個貼著‘廚房’標簽的的房間里”。所以架構工作總是討人嫌,而且帶來的好處人們總是說“這本來就是這樣的”,因為這個微波爐本來就是他搬進去的呀。
02
? ? ? 架構工作在初期都表現為不是非做不可的樣子。就如同這個例子中,你買了300平的大房子,把你出租屋的那些破爛搬進來,全扔雜物房就可以了,不需要“設計”。但如果你不“設計”,后面你的房子可能就一塌糊涂,沒法用。
? ? ? 架構體現價值總出現在設計的后期,特別是所有的約束都被實施上來的時候。那時你會要求睡房里不要有潮濕的東西,書架旁邊不要有帶火的東西,電源線不能拉太遠,洗衣機旁邊必須可以排水之類的要求了,這些要求會互相沖突。
03
? ? ??有效的架構工作很難呈現出直接被外行看到的模式或表象。比如你找個神棍來給你的房子看風水,他用羅盤給你看半天,要求你每個房間里放個馬桶,再養條金魚進去,不僅給你增加約束,還表現的很專業的樣子,你也無法事后說他不對:“雖然你每天都要聞著臭味睡覺,但這給你增加財運啊,你現在沒有住醫院,都是我給你擺的這個陣給你壓著的”。虛假的架構師還喜歡用什么是自己做的來聲稱自己架構做得好,這也只是騙外行,因為架構好不好是看使用效果好不好(一定程度上表現為具體設計,特別是后期的具體設計和使用者自己的‘使用設計’是否容易做),而不是架構設計本身難不難,好不好看,多不多,好不好。
04
? ? ? 架構無法被簡單評價,因為每個架構的實施,都是獨一無二的。架構也不是在選擇不出任何問題的路線,架構只是在選擇出問題比較少的路線。不出問題對你來說可能就是應該的,出了問題你都會說“早知道我就……”。你以為“你早知道就……”,其實你早那樣,別的地方就該出毛病了。其實,大部分時候,你的房子住得還可以,沒有出什么大問題,比起情況差不多的人來說還有些明顯的優勢,你的架構就可以了。只是大部分情況下,你也不會說架構設計師的什么好話?,F在新冠病毒肆虐,你說早該隔離了,但假定早隔離保證這個病毒沒有發作,你又該說當初的實施者吃飽了撐的了。
05
? ? ? 架構無法被細致化,細致化的架構無法響應變化,比如你提前決定每個家具擺放的位置,如果某個家具不能到貨,你就處理不了,你考慮所有可能的組合呢,這個工作量你無法承擔。所以,架構不是一次性的工作,而是一個長期的過程,是一個設計,響應,再設計,再響應……的一個連續循環的過程。架構設計不能著眼于眼前,也不能離開現實。很類似《道德經》的一個表述:豫兮若冬涉川,猶兮若畏四鄰,儼兮其若客,渙兮若冰之將釋,孰兮其若樸,曠兮其若谷,渾兮其若濁。架構遠了不行,近了也不行。
06
? ? ? 架構的工作很多都表現為不能一次成功,比如你為了裝修,在外墻會建腳手架,事后你會拆掉它,你不能說這是“浪費時間”,架構功能常常通過這種腳手架工作體現出來的。它不呈現你想象的純粹“指揮別人干活”的樣子。
07
? ? ? 架構只能靠建模進行邏輯驗證,真正的驗證只有實施的時候才知道。你單考慮水、電、通訊、家具的時候,可能邏輯是通的。但把它們放在一起,就不一定了,每個獨立的建模都有邊際效應,這種邊際效應會互相影響。
? ? ? 最后,架構幾乎無法回頭,如果你一開始就沒有做架構設計,房子里面的線拉得到處都是,每個房間都安排了一些排水設施之類的?;蛘吣愀纱噘I錯了房子,這個位置根本沒有公交系統,你還沒車,你除了把房子賣掉重新找一間,你沒有任何辦法。
? ? ? 所以,架構這種東西,就像雞湯,你說它沒用,沒有這種設計的時候,你就是老出問題,你覺得你“做了架構設計”,這只是個名義,它也不保證你不出問題。
架構設計的方法一般來自四個輸入:
01
? ? ? 架構師在這個問題上的經驗。比如他以前干過很多次這個事情,每個家庭都是有廚房、臥室、衛生間的,分開有好處,他在沒有任何約束的時候,都會制造這個約束,這也確實會帶來好處。因此,也不存在跨行業的架構設計,沒有實際經驗,哲學再好也不能成為架構師(當然,充神棍說不定可以)
02
? ? ? 高層邏輯建模。設計師會在一個很高的層次上構造一些邏輯鏈,保證這個邏輯鏈是自恰的,先用這些邏輯鏈建立約束。比如他會先問:你住在這里是為了什么?為了孩子上學的方便?那么上班怎么辦?……這個邏輯通了,他才會討論是否買車,房子如何設計車庫書房這類的問題。
03
? ? ? 競爭對比?!皠e人怎么做的”,特別是“成功者是怎么做的”
04
? ? ? 反復的投資收益對比。設計師可能想的是一件事怎么做,而架構師想的是這件事的成本是多少,是否有錢做,能否找別人做。架構師還要觀察每波投資的時機,讓每波投資進入系統的時候,都能成為架構目標的助力(“動善時”)。所以成功的架構過程幾乎不可能被復制,因為架構過程是和外部輸入的時機緊密結合在一起的。房子要填一個小洞的時候,正好鄰居有一些沙子要扔,這個時機,你沒有準備,就沒有辦法利用上。軟件更加是這樣,使用方的投資的時候,你不成熟不會用你,你成熟了你不需要它,你要做好一這個軟件,就要排布一個用戶機會計劃,靠這些用戶催熟你的軟件,這需要一個計較和設計。沒有應用可以僅在實驗室就成熟的。
另外
架構設計還會引入一些其他策略!
? ? ? 比如“不為天下先”,每個架構設計引入的約束,都會被要求找到一個“收益”,這樣雖然不能解釋為什么,但減少了約束,就為未來響應變化增加了機會)。比如有人建議,“所有房間都要裝排風機”,加排風機需要成本,但這個成本看不到收益,那么我們寧愿邏輯復雜一點,某些房間裝排風機,某些房間不裝,某些房間開窗戶……我們也不能提前增加這個約束,這樣我們才能在后面根據需要決定裝排風機,還是保持密封用來存儲東西之類的?!安粸樘煜孪取?#xff0c;是為未來增加需求留下余地。好的架構師極其反感沒有收益的設計約束,而裝樣子的架構師喜歡引入無效的約束來證明“我也干了活”。
? ? ? 等等······
? ? ? 說到底,架構是在自由階段增加約束,把未來你有可能遇到的約束提前統一在一起,以保證你設計的后期減少約束。架構師分析邏輯鏈總是不考慮“這是對的”,而是考慮“少了什么”。比如有人說,我在房間里放一張床,兩個衣柜,一盞燈,是不是就可以了?架構師不考慮單獨的床,衣柜是不是可以,架構師考慮的是總成本是多少,房間有多大,用來干什么,然后才決定一張床兩個衣柜是不是對的。所以它總是從邏輯的全集來考慮問題。也正因為這樣,架構師比一般具體設計的設計師更關注邊界和邊界上的需求和約束,因為一個簡單的需求判斷的不同,就會帶來一個軟件架構翻天覆地的變化。
版權聲明:凡非原創內容,皆秉分享宗旨,圖文整理自網絡公開信息,版權屬原持有人,亦非本公眾號觀點,如有侵權,請聯系我們刪除。
總結
以上是生活随笔為你收集整理的软件架构设计_给非专业人士介绍——软件架构设计工作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全球地区资料json 含中英文 经纬度_
- 下一篇: 三体智能革命_《三体》之人类的科技文明发