一、先說(shuō)幾個(gè)現(xiàn)象:
1.1
我曾經(jīng)的團(tuán)隊(duì)中的幾位優(yōu)秀的架構(gòu)師,寫(xiě)框架代碼寫(xiě)的很不錯(cuò)的那種。他們?yōu)槭裁茨軐?xiě)出好代碼?為什么能做出復(fù)雜系統(tǒng)的設(shè)計(jì)? 他們自己好像也不能說(shuō)出個(gè)所以然來(lái)。 我把這稱(chēng)之為意識(shí)流。(也就是大概是憑經(jīng)驗(yàn),靠感覺(jué))并且,這種憑經(jīng)驗(yàn)的說(shuō)法也被不少DDD的專(zhuān)家大佬用來(lái)回答如何掌握領(lǐng)域建模能力上。
1.2
或者你也有一種感覺(jué),你知道一些好的設(shè)計(jì)原則和模式,但是你不會(huì)用。 另外一種感覺(jué)就是UML的圖你都會(huì)畫(huà),但是如果讓你從0開(kāi)始設(shè)計(jì)一套系統(tǒng),你還是不知道如何開(kāi)始。
1.3
只能憑經(jīng)驗(yàn)這種說(shuō)法,對(duì)于我一個(gè)管理者來(lái)說(shuō)。它意味著不可快速培養(yǎng),無(wú)法規(guī)?;?;只能任由其自由生長(zhǎng),通過(guò)一個(gè)又一個(gè)項(xiàng)目來(lái)加強(qiáng)和驗(yàn)證一個(gè)人是否擁有良好的設(shè)計(jì)能力,是否有架構(gòu)師的潛質(zhì) 。 我始終無(wú)法接受這個(gè)結(jié)果。 雖然之前我也是一個(gè)經(jīng)驗(yàn)和感覺(jué)型選手。
二、轉(zhuǎn)機(jī)
2.1
轉(zhuǎn)機(jī)的上半部分來(lái)自于我看了一書(shū)關(guān)于架構(gòu)的神書(shū)《系統(tǒng)加構(gòu)——復(fù)雜系統(tǒng)的產(chǎn)品設(shè)計(jì)與開(kāi)發(fā)》 豆瓣評(píng)分達(dá) 9分。通常在8分以上就是值得一讀的書(shū)了,9分的書(shū)讀懂一本對(duì)某件事情的看法可能就會(huì)發(fā)生一些根本性的改觀。這本書(shū)確實(shí)很難懂,至少我強(qiáng)行安利給了我身邊的很多人,并且還組織過(guò)一段時(shí)間的讀書(shū)分享小組。 這本書(shū)的作者對(duì)于架構(gòu)的本質(zhì) ,以及如何來(lái)做架構(gòu)是非常深的。雖然這本書(shū)的難懂確實(shí)讓很多人放棄了,但我始終認(rèn)為堅(jiān)持看完3遍以上你對(duì)架構(gòu)這件事情會(huì)產(chǎn)生很大的改觀。
2.2
上面那本書(shū)雖然把架構(gòu)的本質(zhì)講清楚了,但是并沒(méi)有降低多少做架構(gòu)的復(fù)雜度。直到我通過(guò)這種書(shū)里面用的概念建模語(yǔ)言O(shè)PM 找到了另一本書(shū)《基于模型的系統(tǒng)工程——綜合運(yùn)用OPM與SysML》 ,怎么說(shuō)呢,我當(dāng)時(shí)也是震驚的。因?yàn)檫@里面是這么說(shuō)的:
功能是整個(gè)模型由此逐漸演變的種子。這條原理可能違反直覺(jué)。因?yàn)樵S多工程師傾向于從結(jié)構(gòu)——對(duì)象、系統(tǒng)包括的實(shí)體,而不是功能開(kāi)始建模。
也就是說(shuō)它是從找到關(guān)鍵過(guò)程開(kāi)始的,這有一種好像回到面向過(guò)程的方法里面去了。要知道在《面向?qū)ο蠓治雠c設(shè)計(jì)》里面,格雷迪大佬明確地表示這種結(jié)構(gòu)化的設(shè)計(jì)過(guò)程是不可取的。
2.3
以公交車(chē)載客為例,如果是用面向?qū)ο蟮姆绞矫枋?,就?huì)把整個(gè)系統(tǒng)分為公交車(chē),司機(jī),乘客,車(chē)站等,然后分析它們?cè)谡麄€(gè)系統(tǒng)運(yùn)作中的互動(dòng)關(guān)系,關(guān)注的焦點(diǎn)是對(duì)象;而如果是面向過(guò)程,則會(huì)把整個(gè)從過(guò)程拆解為“開(kāi)始跑路線-載客-啟動(dòng)-到站”,關(guān)注的焦點(diǎn)是過(guò)程。
面向?qū)ο蟮慕#ó?dāng)然,這是靜態(tài)結(jié)構(gòu)的建模,如果要對(duì)動(dòng)態(tài)行為進(jìn)行建模,我們還需要一個(gè)時(shí)序圖來(lái)表示)
我們可以用乘客和司機(jī)為主體找到這樣幾個(gè)關(guān)鍵過(guò)程。(有人可能會(huì)發(fā)現(xiàn)這跟UML里面的用例圖是很像的)
是的在OPM 里面會(huì)把角色也當(dāng)成一個(gè)對(duì)象,它的類(lèi)型是主體對(duì)象。主體對(duì)象作為一個(gè)人類(lèi)對(duì)象操縱一個(gè)過(guò)程;但是如果接下來(lái)的操作可能會(huì)讓你出乎意料了。
當(dāng)然我們通過(guò)一個(gè)“過(guò)程”,它可以作為一個(gè)抓手或者推導(dǎo),幫我們很自然地找到相關(guān)的對(duì)象。比如:
以乘客的上車(chē)和下車(chē)過(guò)程作為推導(dǎo),你會(huì)找到什么?
三、OO VS OP
OO我們說(shuō)的是面向過(guò)程,但是這里的OP 不是面向過(guò)程。而是對(duì)象過(guò)程 。OPM它的全稱(chēng)叫做Object Process Methodology 對(duì)象過(guò)程方法。是由以色列理工學(xué)院的Dov Dori教授研發(fā)出來(lái)的,它的目的是將面向?qū)ο蟮膱D表和面向過(guò)程的圖表綜合到一套方法中,更方便對(duì)系統(tǒng)架構(gòu)進(jìn)行描述。所以你看到上面將對(duì)象與過(guò)程放到了一張圖里面。
它沒(méi)有改變OO里面關(guān)于抽象、封裝、模塊化與層次的本質(zhì) 。而區(qū)別于OO里面僅通過(guò)在總是域中找名稱(chēng)的形式來(lái)進(jìn)行類(lèi)的抽象,坦白講這有點(diǎn)像老師跟你說(shuō)你自己想一下。雖然這個(gè)道理很深?yuàn)W,但是可能很難參透。
而OPM給我們帶來(lái)的是找到關(guān)鍵過(guò)程,然后通過(guò)關(guān)鍵過(guò)程的鏈接(主體對(duì)象、工具對(duì)象、輸入對(duì)象、受影響的對(duì)象)等,為我們搭建了一個(gè)橋梁,能夠幫助我們降低抽象的門(mén)檻。并同時(shí)能夠讓我們利用OO的思想中的那些本質(zhì)元素:抽象、封裝、模塊化與層次。 (OPM對(duì)于層次的建模不需要像UML那樣分為多張圖)
四、這是廣告
我在我們一期功能架構(gòu)訓(xùn)練營(yíng)中將架構(gòu)過(guò)程與OPM相結(jié)合,打造了一套科技學(xué)落地架構(gòu)設(shè)計(jì)過(guò)程與方法。同學(xué)學(xué)完之后是這么說(shuō)的:
學(xué)習(xí)這個(gè)打開(kāi)了我的新世界 ,原來(lái)這個(gè)還有方法論。我也有下載你說(shuō)的那個(gè)系統(tǒng)架構(gòu):復(fù)雜系統(tǒng)的產(chǎn)品設(shè)計(jì)與開(kāi)發(fā),用瑣碎的時(shí)間看了前面2張,后面就扔掉了。從投資與回報(bào)來(lái)說(shuō),你的課程確實(shí)性價(jià)比特別高。
在前幾天我還沒(méi)有意識(shí)到雖然這個(gè)過(guò)程是已經(jīng)存在的,但是它之前是被應(yīng)用在更廣泛的系統(tǒng)設(shè)計(jì)上(比如硬件或者其它系統(tǒng)),但是在軟件設(shè)計(jì)領(lǐng)域,可能還沒(méi)有。(如果有的話麻煩告訴我- -、) 想想這個(gè)過(guò)程可能拯救國(guó)內(nèi)600萬(wàn)被OO搞的頭大的程序員于水火之中,這件事情就值得我好好地去推廣。
聯(lián)系客服