『網際網路架構』軟體架構-軟體系統設計(一)
按照正常的網際網路玩法,產品經理原型畫好進行需求評審,評審完後,需要把需求丟給技術經理,或者技術負責人,進行一整套的概要設計,然後針對概要設計評審,概要評審後進行開發。這次咱們一起說說概要設計的體系結構。瞭解下套路。
軟體系統設計
軟體系統設計在很多人眼裡就是寫文件,寫文件是一種負擔,其實系統設計頭腦風暴,是一種非常開心的事情。所以必須掌握什麼是系統的設計。它裡面有哪些方法論,如何去做一些系統設計。
我們平常做開發設計嗎?
才畢業回鄭州那幾年,都是一句話就是需求,開發完了河南本地連個測試人員都沒有,開發人員說開發完了就開發完了,直接拿給使用者進行測試。有的使用者直接罵娘,有的使用者用的感覺很不爽哭的(工作沒做完),有的使用者直接摔東西的。聰明的一點的使用者都直接聯絡開發人員幫他來操作。直接測試都沒有,使用者就是測試人員,說實話7,8年前的告訴使用者怎麼用,他怎麼用。他感覺很神祕,這幾年隨著網際網路產品越來越多,智慧手機的普及,大家對軟體的要求越來越嚴格了。很多之前的習慣的同事,現在都沒轉變過來,真是土,土的掉渣。後來其實也沒太關注設計,可能就是之畫個圖。直到後來跟第三方系統進行互動資料,剛開始草草的設計下,導致之後的2個月都沒好過。所以說系統設計是一項非常重要的工作。而不是老鐵們經常說的就是寫個文件就行了。
- 拿這鍵盤直接幹。
- 深思熟慮,考慮到多方的問題,在開始我們的編碼。
- 需求裡面是一句話,直接就是幹,別墨跡。
- 做設計的時候,開發人員在考慮?還是技術經理在考慮?
用什麼方法做?
瀑布流程(網際網路直接忽略)
需求確定的基礎上,系統設計的方方面面設計的都很全面,把每個階段都有非常嚴格的驗證條件,在主流的大型軟體的開發方式。
基於原型,快速迭代(網際網路常用)
許多創業公司的老闆真心喜歡,感覺業務可以進行快速的開發,其實在裡面還是有很多的坑在裡面的。很少有人基於瀑布來開發。其實快速迭代也變成了很多老闆讓各位老鐵趕專案的理由了。我幾個億的單子,先讓使用者驗證,讓使用者體驗到,大家不能耽誤我們偉大的商業模式,就算是這種開發模式也是需要有文件的,對設計不清楚的地方也會有很多,很多的坑在裡面,包括後期的效能和擴充套件也好,如果前期底子沒有搭建好的話,後期傷筋動骨。隨隨便便改一個小功能可能要對程式進行傷筋動骨。但是這個時候老闆是不會管你的,測試人員更不會管你,產品也不會管你,他們只知道我們滿足業務和需求。
具體設計什麼
具體到底需要設計什麼?如果系統沒有做好一個設計,如果你還是基於所謂的原型,快速迭代敏捷開發以這為藉口的話,程式後期越來越大,越來越大的時候真心很傷,根本都不改你的系統,就比如說:銀行,社保裡面的程式碼基本是10年前的程式碼,裡面的問題一大堆,但是沒有人敢改,這也是設計部合理導致的一個毛病。
- 體系結構設計
- 指明瞭一個系統是什麼,它是整個軟體中最本質的表現
開發人員看文件的時候,首先就要看體系結構。它是軟體系統最本質的東西,主體的形態,人的骨架就是體系結構。如果你設計的體系結構是個大猩猩,後期不管如何進化,如何發展,它始終無法變成一個人,只能是個猩猩。比如蓋房子,可能蓋高層,可能蓋土房,可能蓋平房,或者是窯洞,一開始就想蓋高層,它需要的材料,地基深度什麼都是不一樣的。所以體系結構就需要了解軟體設計的本質。也可以說架構。
2. 應當設計的很穩定
蓋到一半,要換地基是不是很悲催。開發的設計的時候一定要三思而後行。
3. 設計的原則
3.1 適應性
滿足使用者需求,達成商業的目的。而不是開發人員自己歪歪,高水平的設計人員就是設計出來剛剛滿足使用者需要的軟體,而不是不惜一切程式碼設計出來一個最先進的軟體,沒有最好,只有最合適。打造閉環是最好的,對於很多網際網路專案,可能不是剛需需求,可能不是成熟的商業模式,如果非要進行閉環,試錯的機會都不給,開發的成本老闆接受不了,老闆無法快速推廣到市場裡面。開發的功能越多,功能越強大的話,一旦業務發生調整的話,軟體不好發生變動。所以要分為很多個階段。開發和產品經理很多容易犯這個毛病,剛開始就設計都喜歡大而全,精而細。 產品經理經常愛說:『別人的系統都有這個功能,你為什麼做不了!』,其實可以這麼懟過去,給他上一課:『這樣的產品設計根本就不能滿足現階段產品設計的適應性!』
3.2 結構穩定性
我們設計的要相對的穩定性,一定確定一定要相對的穩定性,如果經常變動,就相對於房子的地基,你看到那個房子蓋好後的地基經常發生變動。如果軟體經常發生,太悲劇了。體系結構設計的不穩定,範圍不清楚,如果一個系統剛開始是B2C,突然要變成B2B,表結構,系統模組,介面,全部都要發生比較大的改變。整個專案變的很輪亂,需求不停的變動導致系統很混亂。導致開發人員不敢動程式碼(牽一髮動全身),都是複製一份 程式碼。最後維護多份程式碼。對於高水平的設計師都是有一定經驗的,可以預先知道那些需求是基本不變的,那些需求是可變的。
必須匯出:可變需求和可變需求。
舉個例子:之前專案中針對訊息中心的設計,訊息中心:對於使用者來說會有很多種類的訊息。訊息除了pc端,移動端也有很多的訊息,物流訊息,營銷訊息,通知訊息。當時就有一個問題, 實際的訊息中心,就是接收到各種渠道的訊息,然後分發到各個平臺(郵件,簡訊,推送,系統訊息資訊)。之前沒有訊息中心,都是業務方自己各自來完成的。為了滿足原子性,原子是不可變的,訊息中心需要做的就是按照業務方的需求把訊息傳送出去,傳送到對應的渠道,簡訊。但是訊息中心是在業務平臺之後設計的,業務平臺不可能因為傳送訊息修改自身的業務程式碼。在訊息中心專門設計了一個監聽模組,監聽業務方的一個動作,這個模組跟業務平臺是緊耦合的,事件監聽模組隨著業務而變動,訊息中心的核心功能不會發生變動的,因為功能很純粹就是發訊息,收訊息,推送訊息。這就是當時如何保證穩定性的問題。在模組上進行劃分。如果之後在需要拆分的話,直接把模組進行拆分。監聽模組,按照業務的變更進行變更。
穩定性,就不會被業務需求方趕著走,專案是可控的。天天不用擔心老闆又有新需求。
3.3 擴充套件性
軟體在擴充套件新功能的難易程度。擴充套件性越好,適應變化的能力越強,尤其是敏捷開發,如果擴充套件能力不強的話,很容易進入一個死衚衕裡面去。區分可變動和不可變動。軟體體量約小,擴充套件能力越強,船小好調頭。為什麼專案分階段,就是為了可擴充套件。系統的體量肯定受限業務的,越大的專案擴充套件性越難,所以要進行分散式(應用層,中間業務層,原子服務層),分層(控制層,服務層,資料訪問層),越是往下穩定。
合理的業務模組劃分,擴充套件的時候根據模組進行拆分擴充套件。業務的邊界劃分。
3.4 是不是所有的系統在設計的時候都要考慮擴充套件性
一次性專案,只要完成現階段的功能就可以了,例如兩個單獨的公司的對接介面,其實很多時候因為可能是一次性的,沒必要考慮擴充套件性,如果考慮可能就變成了過度設計。如果做開放平臺的話,肯定要考慮擴充套件性。
3.5 可複用性
用一次還可以繼續在用,工具類,公共的元件。工具類一定設計的純粹(對使用環境沒有假設,少配置零配置,沒有依賴)
- 表結構設計
- 方法論
- 表結構設計
- 效能擴充套件性考慮
- 系統的模組設計
-
原型介面設計
-
設計模式
-
資料結構和演算法
PS:在之前也是不做設計的,但是做過設計的後明顯是跟不做設計有很大的區別的。很多提前設計的好,做設計很容易可控。不管大家對設計的理論有多少,設計是必須的。凡事預則立不預則廢。設計是為了讓開發,測試人員,產品經理(設計沒有偏差)。
已是最後文章下一篇: