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