前段時間寫了篇架構設計文檔,一直想就這件事聊點什麼,結果一拖就拖到如今了。算起來這是我第二次寫架構設計文檔了。一路摸爬滾打,算是有一點點領悟,也不知道對不對,就隨便說說。程序員
不少人以爲架構文檔沒有什麼寫的,或者說不知道要怎麼寫。其實我以爲這是由於本身對架構、或者對業務需求並非那麼理解。若是真的理解了,再來寫這個文檔,會發現真的有不少能夠寫的地方。由於你在明白架構設計文檔的目的、做用後,就知道這個東西不只僅是拿來糊弄公司的,而是真的有指導意義的。面試
首先要理解架構設計文檔的做用,架構設計文檔其實對項目開發是有很大幫助的,並且在寫架構設計文檔的過程當中,也能讓設計師認真的從新梳理一遍業務需求,從而有針對性的去設計,而不是在寫代碼過程當中臨時決定要用什麼方法去寫。數據庫
忽然想起以前面試的時候問面試者,架構是什麼? 聽到的回答五花八門,什麼都有。有的人乾脆就說架構就是 MVC,MVP 等等,讓人有點無奈。我在這裏簡單聊一下個人理解。微信
架構這個詞其實並非軟件領域專有的。它甚至能夠追溯到人類起源的時候。markdown
剛開始人類只有很簡單的需求:有東西吃、有地方睡。一我的就能作完全部的事情。可是隨着需求變得多樣性,還有技術領域的細分化,一我的作不完全部的事情了,並且也學不會那麼多技能。這個時候社會分工就出現了。隨即演變出了社會組織架構。包括如今的企業組織架構,都是爲了更好的分工而生的。網絡
建築中的架構也是相似的。一開始就一個茅草屋,一個火坑,簡簡單單的屋子就夠了,不須要什麼架構設計。隨着社會的發展,人們對建築功能的需求也愈來愈多,空間的切分也愈來愈細緻。以居所爲例,出現了客廳、餐廳、廚房、臥室、衛生間等專用空間。隨着人們對空間劃分變得細緻、空間組合變得多樣,建築架構就應運而生了。架構
那麼在軟件領域,架構最根本的目的,我認爲也是爲了讓一個團隊能更好的分工,進而更好的合做。框架
以前說了,寫不出文檔一方面是由於對架構理解不到位。另外一方面就是由於對業務需求理解的不到位,那麼爲何業務需求對架構這麼重要呢?工具
業務在很大的程度上決定了一個團隊的分工。可是在講業務需求以前,我想先聊一下程序員所須要解決的兩類問題。性能
第一類就是生意問題。咱們製做的軟件,其實都是爲了作生意。並且不少時候,這個生意沒有了軟件同樣能作,只是比較低效而已。咱們只是生產了一個工具,能夠提高作生意的效率。
另外一類問題,就是計算機問題,是用來支撐咱們去生產這個工具的,好比計算機、數據庫、網絡等等,都是爲了更好的支撐咱們去模擬作生意的過程。
這兩類問題,都會對咱們的架構設計產生或深或遠的影響,因此必定要在設計前就有必定的瞭解。
接下來聊聊業務需求爲何會對架構設計產生深遠的影響。咱們先看一下建築的用途是怎麼影響到建築的架構的。
像農村裏的普通住宅(通常規模),磚混結構就夠用了;城鎮的中低層住宅樓(規模變大),就須要框架結構;高層住宅(規模進一步變大)的結構也不同,是核心筒 + 剪力牆;至於像機場、車站這種須要超大空間的建築體(另外一種使用場景),則又須要大跨結構。你看,建築上不一樣的空間訴求,對架構的要求也是不一樣的。
回到軟件領域,不一樣的業務,它的特色也不同。像活動這種,每天在變,那麼架構設計上就須要考慮快速迭代和快速開發;像日誌系統,天天都有大量寫入,可是讀取比較少,因此在設計的時候也要考慮性能和穩定性等因素。不一樣的業務需求,有不一樣的特性,咱們要在架構設計的時候就考慮進去這些特性,而且盡力去知足這些需求。
在這裏我再多嘴一句,不少時候咱們接收到的任務,實際上是別人給過來一個解決方案,並非他想解決的問題。咱們要學會識別這個陷阱,由於別人給的解決方案可能並非最優的解決方案,甚至多是錯的。咱們須要直面問題,而後解決問題,這樣是最高效的。
說了這麼多,到底要怎麼寫架構設計文檔呢?
我以爲架構文檔最應該體現的就是:對業務需求的合理分解,以及對各個子業務的特性的理解。對業務進行了合理的分解後,咱們的項目就有了一個比較合理的骨架,這個骨架就是咱們的底層架構。而後再對每一個子模塊作概要設計,隨後將底層架構和上層的各個子模塊的設計進行融合。其實這個過程就是一個化繁爲簡的過程,將繁瑣的業務轉化爲一個個關鍵類和協議接口。
到了這一步,咱們對業務已經有了很明確的認知了,天然也清楚每一個模塊的特性,此時再作技術選型,就有很強的目的性了。這樣一來計算機問題也就隨着業務問題一塊兒解決了。
這裏有一個文檔綱領,只要思路正確,直接填鴨也沒啥問題。
1、概述
2、目的
3、項目背景
4、系統建設目標
5、參考資料
6、架構設計
6.1 架構分析
6.2 設計思想
6.3 架構體系
6.4 系統視圖
6.5 模塊劃分
6.5.1 模塊描述
6.5.2 模塊接口
``
---
最新更新請關注微信公衆號
![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/2/5/170134ee28fdd62e~tplv-t2oaga2asx-image.image)複製代碼