聊聊系統設計的套路

幾個公衆號轉了我三年前寫的<我在系統設計上犯過的14個錯>,閱讀量遠比當年我發的時候高多了,感謝呀,那篇確實算得上心血之作了,哈哈,正好最近我在內部在做一個系統設計培訓的嘗試,有了更多感受,在這篇文章裏再來寫寫。

系統設計我一直覺得是遠比Java編程技能更難多了的培訓,很容易變成務虛課,全是一堆理論,然並卵(想想一堆沒怎麼做過系統設計的人講系統設計的課,這純粹是開玩笑),所以以前從來不敢嘗試做這方面的培訓,不過今年由於一些情況,決定大膽嘗試下,就在內部搞了個民間的培訓,結果還真有不少同學捧場,在開始上這門課後,我覺得收穫最大的搞不好是我自己,整理思路,從和學員的互動中學習到了很多,能更好的對系統設計的一些方法論進行抽象總結,所以我和這些捧場的學員們說其實是我們一起在共創系統設計的課程 。

我給系統設計培訓定的目標是:

  1. 通過這堂課掌握一個思考框架,知道做系統設計的套路,系統設計不是簡單的上來就畫畫框什麼,必須按照一定的套路才能更好的進行系統設計;
  2. 拓寬知識面,系統設計中非常重要的是考慮的全面性,以更好的進行權衡取捨,所以能不能借助系統設計培訓來拓寬知識面非常重要。

而要達到這樣的效果,怎麼去上這堂課挑戰其實是不小的:

  1. 想要傳達的思考框架到底是什麼?怎麼樣變成不是純粹的理論,務虛的傳達,從而讓大家能更好的掌握並真正的去運用這個思考框架?

以前真的沒仔細的思考過系統設計的思考框架的問題,其實吧很多的系統設計的模板就是一個思考框架,但在不理解的情況下,是很難應用好的。

回顧了下自己做過的幾個系統的設計,發現現在自己在做系統設計的時候確實是會按照一個套路去做,這個套路就是:

系統設計的目的->系統設計的目標->圍繞目標的核心設計->圍繞核心設計形成的設計原則->各子系統,模塊的詳細設計。

1). 系統設計的目的

是指做這個系統設計的目的到底是什麼,很多人在做系統設計時,是搞不清爲什麼要做一個新系統的設計,或者爲什麼要做一個系統的重構/演進的設計,如果搞不清楚這個目的,後面的系統設計上是很容易形成偏差的,導致本來是爲了解決一個問題,要去做新的系統或重構/升級舊的系統,但最後完全脫離了初心。

另外,還有很重要的一點是,一個大架構師是需要給很多人講解系統設計的,只有理解並講清了系統設計的目的,團隊才能更好的去實現。

2). 系統設計的目標

圍繞上面的目的,能不能形成一些可衡量的目標,從而確保最終系統實現和最初的目的不要出現太大的偏差,相信很多人都經歷過最終的系統實現和系統設計偏差極大的現象,主要的原因基本都是沒有制定衡量系統設計的目標,並在系統設計上讓系統能透出這些目標的情況。

3). 圍繞目標的核心設計

這步最重要的就是通過設計如何去實現上面的目標,這個環節中技術的專業、視野、全面的考慮、權衡取捨的主觀原則、解題的思路,這是形成最後的核心設計的關鍵。

在覈心設計的這個階段中,會產生一些新的衡量設計最後實現情況的目標,這些也都要增加到系統設計中,確保最後的實現和設計的偏差度是可視的。

4). 圍繞核心設計形成的設計原則

有了上面的核心設計後,可以真正的形成一些設計原則,確保後面的子系統/模塊的詳細設計中能夠遵循,並在詳細設計中體現出來,這樣才能讓整個大的系統設計的一致性。

5). 各子系統/模塊的詳細設計

這個部分我倒覺得難度不會太大,畢竟有了前面的鋪墊,就是解好一個更小範圍的題,程序員羣體在解題能力上通常是不錯的,所以我一直覺得數學功底好是程序員的基本,數學就是典型的解題的學科。

ps: 這就是做分享/培訓的好處,藉機仔細整理自己的碎片,從而形成體系。

關於怎麼更好的讓大家能掌握並運用這個思考框架,我的想法就是在講每個步驟的時候講講自己當年在這些步驟上犯的錯,實際的經驗,這樣我覺得也許大家以後在做系統設計時就能想起,所以我覺得系統設計這種培訓絕對是需要具備大量實際經驗的架構師才能做。

在運用部分,採取的方法就是通過互動,讓大家按照同樣的思考框架來講自己的所負責的系統,通過互動來更好的彼此對齊,並藉此逐漸變成習慣。

上面只是對每個步驟的簡單的闡述,後面會再來細節的寫寫上面的每個步驟內的點。

  1. 知識面拓寬這個倒還好,講一個全站的系統架構就好,這樣可以讓知識面從業務架構、到基礎技術架構、到涉及到基礎設施的部署架構等。

本文轉載自公衆號HelloJava(ID:hellojavacases)

原文鏈接

https://mp.weixin.qq.com/s/n25LljA5P4JgIzAQxNVi1g

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章