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